java 重定向out_Java System.out重定向问题

博主编写递归目录搜索,想将Java控制台消息重定向到JTextArea,代码实现后遇到问题,在GUI执行时textarea无内容,调整命令行语句也无法兼顾消息打印和进程执行。最终发现是Swing GUI主线程被阻塞,通过在逻辑类实现Runnable并以新线程调用解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我编写了一个递归目录搜索,对于匹配某个模式的每个目录,它将执行.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中的新线程调用它来解决 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值