別の別のプログラムを呼び出していくつかの作業を行うプログラムがあります(サブプロセスと呼びましょう)。サブプロセスは各タスクを完了するのに時間がかかり、単純なコンソールに進行状況を表示します。
問題は、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 に表示することです。終わるのを待たずに。