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