首页 文章

Java System.out重定向问题

提问于
浏览
1

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

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

递归搜索和进程执行是可以的,但是当我尝试用GUI执行时,没有任何内容写在textarea上 . 当我将一些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”语句时,消息将按照我的意愿打印在textarea中,但不会执行该过程 . 使用start语句,程序会正常执行并生成我的pdfs,但根本不会向文本区域打印任何消息 .

我在这里想念的是什么?

提前致谢 .

解决了:

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

1 回答

  • 1

    尝试

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

    flush 每次 println 之后

相关问题