Lassen Sie mich zuerst sagen, dass meine Erfahrung mit Threading ziemlich niedrig ist.Java-Threading-Frage - Hören von n Fehler-Streams
Ich habe eine App, die mehrere andere Java-Gläser über die Runtime.exec
Methode startet. Das Problem ist, dass die gestarteten JARs gleichzeitig ausgeführt werden müssen, aber um den Fehler-Stream für die gestarteten JARs zu erhalten, muss man im Grunde eine Schleife 'sitzen und zuhören' haben, bis der Prozess abgeschlossen ist.
Das ist, was ich habe jetzt:
_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();
Kann mir jemand erklären, wie die ‚Fehlerstrom-Listener-Threads‘ zu bekommen richtig funktioniert?
TIA
Ja, ich habe das schon mal gelesen. Das Problem ist, dass rt1 einen hörenden Sockel öffnet und rt2 die Schreibseite des Sockels öffnet. Wenn ich 2 Threads starte, um sich von den Streams von rt1 zu ernähren, scheint der Eltern-Thread zu blockieren und rt2 startet nie. Ich habe versucht, alle Exec-Befehle auszuführen und dann alle Listener zu starten, und wenn ich dies tue, zwingt es die exec'ed-Befehle zu blockieren. – javamonkey79