[英]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);
或每次println
后flush
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.