スレッドの経験がかなり少ないことをまず教えてください。Javaスレッドの質問 - n個のエラーストリームをリッスンする
Runtime.exec
メソッドを使用して、他のいくつかのJava jarを起動するアプリがあります。問題は、開始されたjarファイルは同時に実行する必要がありますが、開始されたjarのエラーストリームを取得するには、プロセスが完了するまで基本的にループを「座って聴く」必要があります。
これは私が今持っているものです。
_processes.add(Runtime.getRuntime().exec(commandList.toArray(new String[ commandList.size() ])));
Thread thread = new Thread(new Runnable() {
private final int _processNumber = _processes.size() - 1;
public void run() {
String streamData = _processNumber + " : ";
streamData += "StdError [\r";
BufferedReader bufferedReader =
new BufferedReader(new InputStreamReader(_processes.get(_processNumber).getErrorStream()));
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
streamData += line + "\r";
}
bufferedReader.close();
streamData += "]\r";
LOG.error(streamData);
}
catch (Exception exception) {
LOG.fatal(exception.getMessage());
exception.printStackTrace();
}
}
});
thread.start();
、誰もが「エラーストリームリスナー・スレッドは、」正常に動作させるためにどのように説明できますか?
TIA
ええ、これまでに読んだことがあります。問題は、rt1がリスニングソケットを開き、rt2がソケットの書き込み側をオープンしていることです。 rt1のストリームから2つのスレッドを開始すると、親スレッドがブロックされてrt2が起動しないように見えます。私はすべてのexecコマンドを実行してからすべてのリスナーを起動しようとしました。これを実行するとexec'edコマンドが強制的にブロックされます。 – javamonkey79