繁体   English   中英

Java System.out重定向问题

[英]Java System.out redirect issue

我编写了一个递归目录搜索,对于与特定模式匹配的每个目录,将执行一个.bat。 现在,我想将打印到Java控制台的消息重定向到JTextArea(无需编写standardErr)。 以下代码用于GUI的重定向部分。

taConsole = new JTextArea();
taConsole.setEditable(false);
PrintStream printStream = new PrintStream(new CustomOutputStream(taConsole));
JScrollPane consolePane= new JScrollPane(taConsole);
System.setOut(printStream);

递归搜索和流程执行是可以的,但是当我尝试使用GUI执行时,没有任何文字写入文本区域。 当我将某些System.out.println(“ foobar”)插入GUI类时,消息将按预期方式打印到文本区域中。 但是,我的逻辑类上的打印没有插入到textarea中。

该程序在执行bat之前和之后打印一条消息,如下所示:

System.out.println("Generating PDFs for"+grandparent+"\\"+parent+"\\ ..."+f.getName());
Process p = Runtime.getRuntime().exec("cmd /c start /wait .\\Run.bat \""+f.getParent()+"\"");
p.waitFor();
System.out.println("PDFs generated!");

(不是这样)有趣的是,当我从命令行中删除“ start”语句时,消息将按我的意愿打印在文本区域中,但是该过程未执行。 使用start语句,程序可以正常执行并生成我的pdf,但是根本没有消息打印到文本区域。

我在这里想念什么?

提前致谢。

解决了:

实际的问题是,swing GUI的主线程被阻塞,等待递归搜索(和PDF生成)结束,因此未刷新框架。 通过在逻辑类上实现Runnable并通过GUI中的新线程调用它来解决。

尝试

new PrintStream(new CustomOutputStream(taConsole), true);

或每次printlnflush

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM