javaFX的控制台实现
最近做了個javaFX的工具,想弄個控制臺輸出信息,準備用TextArea來模擬console,但直接操縱console對象的話不依賴這個項目的地方就無法輸出信息到控制臺了,至于log,以前弄過一個輸出到console,log文件,和TextArea的程序,但得出的結論是很多時候log和控制臺的內容是不一樣的,log和console的內容應該分開,最后決定用System.out,將TextArea定為標準輸出流的target。
gui的部分略過,界面弄好后,首先要做的是定義一個OutputStream,這個stream會將數據寫到textArea,也就是我們的console。
System.setOut(new PrintStream(new OutputStream() {@Overridepublic void write(int b) {String text = String.value0f((char) b);Platform.runLater(() -> {console.appendText(text);});}@Overridepublic void write(byte[] b, int off, int len) {String s = new String(b, off, len);Platform. runLater(() -> console. appendText(s));} }, true)); System.setErr(System.out);以上的console是一個TextArea,這里值得一提的有兩點
以上就已經實現了把System.out和System.err輸出到TextArea console的功能了,接下來在記錄下把cmd的信息輸出到這里
Process process = Runtime.getRuntime.exec(...);// 這里執行cmd Charset charset = Charset.forName("gbk"); new Thread(()->{try(InputStreamReader reader = new InputStreamReader(process.getInputStream(), charset)){int read;while((read = reader.read()) != -1){System.out.print((char)read);}} catch (IOException e){e.printStackTrace();} }).start();這里起了一個線程是為了防止界面卡死,異步將cmd的輸出流輸出到System.out,這里的charset應當與cmd的編碼一致,中文系統的cmd的編碼是gbk而java默認編碼是utf-8,所以需要創建一個gbk的字節流再輸出到console,這里只輸出了System.out,System.err同理
轉載于:https://www.cnblogs.com/DXDE443/p/10103824.html
總結
以上是生活随笔為你收集整理的javaFX的控制台实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 失战于知识付费,会员与智能硬件将助蜻蜓F
- 下一篇: 华为敏捷DevOps实践:如何从Exce