Hallo zusammen,
ich habe mit Swing einen Dialog gebastetelt, der beim Klick auf einen Button drei in C++ geschriebene Prozesse mit Runtime.exec() startet, zwei Render-Server und einen Client der ihnen die Grafikdaten bereitstellt.
In dem Dialog möchte ich in drei JTextAreas die Ausgaben dieser Prozesse als Log anzeigen lassen.
Wenn ich mich der Inputstreams, OutputStreams und ErrorStreams der Prozesse mit dispose entledige funktioniert alles tadellos, nur eben ohne die Möglichkeit die Ausgabe der Prozesse aufzuzeichen.
Erlaube ich z.B. den InputStream/Ausgabe des Clients ohne ihn auszulesen, so starten die Prozesse erst wenn ich den Dialog schließe.
Erlaube ich den InputStream/Ausgabe des Clients und lese ihn mit der Standardlösung mittels InputStream und BufferedReader aus, so wird die GUI meines Dialogs durch die while()-Schleife blockiert, mit der ich den Buffer auslesen lasse so lange der Client läuft.
Gibt es in Java so etwas wie eine onIdle-Funkion, die das Programm zyklisch durchläuft wenn es gerade nichts zu tun hat, wo ich meine Log auslesen und gleichzeitig in die TextArea schreiben lassen kann ohne dass dabei die GUI blockiert?
Oder gibt es für so etwas eine "Patentlösung"?
Hier noch der Code den ich bisher habe:
textAreaClientLog.setText("Status: wird gestartet...\n\n");
Process processClient = Runtime.getRuntime().exec(stringClientLaunch);
processClient.getErrorStream().close();
processClient.getOutputStream().close();
InputStream streamClient = processClient.getInputStream();
BufferedReader bufferClient = new BufferedReader(new InputStreamReader(streamClient));
while((stringClientLog = bufferClient.readLine()) != null)
{
textAreaClientLog.setText(textAreaClientLog.getText() + "\n" + stringClientLog);
}
processClient.getInputStream().close();
mfg wargos
ich habe mit Swing einen Dialog gebastetelt, der beim Klick auf einen Button drei in C++ geschriebene Prozesse mit Runtime.exec() startet, zwei Render-Server und einen Client der ihnen die Grafikdaten bereitstellt.
In dem Dialog möchte ich in drei JTextAreas die Ausgaben dieser Prozesse als Log anzeigen lassen.
Wenn ich mich der Inputstreams, OutputStreams und ErrorStreams der Prozesse mit dispose entledige funktioniert alles tadellos, nur eben ohne die Möglichkeit die Ausgabe der Prozesse aufzuzeichen.
Erlaube ich z.B. den InputStream/Ausgabe des Clients ohne ihn auszulesen, so starten die Prozesse erst wenn ich den Dialog schließe.
Erlaube ich den InputStream/Ausgabe des Clients und lese ihn mit der Standardlösung mittels InputStream und BufferedReader aus, so wird die GUI meines Dialogs durch die while()-Schleife blockiert, mit der ich den Buffer auslesen lasse so lange der Client läuft.
Gibt es in Java so etwas wie eine onIdle-Funkion, die das Programm zyklisch durchläuft wenn es gerade nichts zu tun hat, wo ich meine Log auslesen und gleichzeitig in die TextArea schreiben lassen kann ohne dass dabei die GUI blockiert?
Oder gibt es für so etwas eine "Patentlösung"?
Hier noch der Code den ich bisher habe:
textAreaClientLog.setText("Status: wird gestartet...\n\n");
Process processClient = Runtime.getRuntime().exec(stringClientLaunch);
processClient.getErrorStream().close();
processClient.getOutputStream().close();
InputStream streamClient = processClient.getInputStream();
BufferedReader bufferClient = new BufferedReader(new InputStreamReader(streamClient));
while((stringClientLog = bufferClient.readLine()) != null)
{
textAreaClientLog.setText(textAreaClientLog.getText() + "\n" + stringClientLog);
}
processClient.getInputStream().close();
mfg wargos