我有一个程序,我在其中调用另一个单独的程序来做一些工作(让我们称之为子流程),子流程需要一些时间来完成每个任务并在一个简单的控制台中显示进度。
问题是,当我尝试使用 BufferedReader 读取该控制台时,我自己的程序会等待子进程完成,然后再将每一行写入 TextArea。
这是我用来读取每一行的代码:
JTextArea report = new JTextArea(20,40);
report.setText("");
try
{
Process p = new ProcessBuilder(command).start();
p.waitFor();
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine();
while(line!=null)
{
report.append(line+"\n");
line=reader.readLine();
}
}
catch(IOException e1){ error.setText("Failed to run toxpack");}
catch(InterruptedException e2) {error.setText("Failed to run command");}
我试图研究线程,但它仍然不起作用。
如何在不等待整个子流程完成的情况下阅读每一行并将它们添加到我的 textArea 中。
编辑:添加了其余的代码,但我不确定它是否有很大帮助。我想说的是,我希望子流程输出的每一行都出现在我的 textArea 中。无需等待它完成。