DarthShader
Erfahrenes Mitglied
Hallo zusammen,
ich möchte den standard output stream (sdtout) eines anderen (konsolen-) Programmes auslesen. Der folgende Code zeigt, wie ich das bisher (erfolgreich) mache:
Es funktioniert, solange das andere Programm ("foo.exe") keine Exception wirft. Ist dem so, so stoppt mein Java-Programm beim Versuch, von dem Stream zu lesen.
Meine Vermutung ist, dass das externe Programm den sdtout Stream nicht korrekt schließt, und deshalb "wartet" die Anweisung "line = br.readLine()" ewig auf Daten.
Hat jemand eine Idee, wie man das korrekt macht bzw. wie ich es umsetzen könnte, dass das Lesen vom Stream nicht hängt, wenn das externe Programm abstürzt/eine Exception wirft?
Über eine Antwort würde ich mich sehr freuen
Vielen Dank für Eure Hilfe!
ich möchte den standard output stream (sdtout) eines anderen (konsolen-) Programmes auslesen. Der folgende Code zeigt, wie ich das bisher (erfolgreich) mache:
Java:
// Start the process
ProcessBuilder builder = new ProcessBuilder( "foo.exe", "-list", "/home/user/" );
builder.directory( new File( workingDir ) );
Process process = builder.start();
// Get the process' input stream and create buffered reader
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader( new InputStreamReader( in ) );
// Read from the stream
String line;
StringBuilder sb = new StringBuilder();
while ( ( line = br.readLine() ) != null )
sb.append( line );
Es funktioniert, solange das andere Programm ("foo.exe") keine Exception wirft. Ist dem so, so stoppt mein Java-Programm beim Versuch, von dem Stream zu lesen.
Meine Vermutung ist, dass das externe Programm den sdtout Stream nicht korrekt schließt, und deshalb "wartet" die Anweisung "line = br.readLine()" ewig auf Daten.
Hat jemand eine Idee, wie man das korrekt macht bzw. wie ich es umsetzen könnte, dass das Lesen vom Stream nicht hängt, wenn das externe Programm abstürzt/eine Exception wirft?
Über eine Antwort würde ich mich sehr freuen
Vielen Dank für Eure Hilfe!