1
125wfasf3
Gast
Hallo,
folgendes Problem. Ich starte ein Program per Runtime.getRuntime().exec(..)
Anschließend hole ich mir per getInputStream() und getErrorStream() jeweils die Streams um sie auszulesen.
Nun habe ich aber ein Problem bei der korrekten Reihenfolge.
Normalerweise lese ich zuerst den getInputStream aus.
Nun ist es aber ab und zu möglich, dass ich dem exec eine fehlerhafte Datei übergebe und dann wird gar nix in den InputStream geschrieben, sondern nur in den Errorstream. Daher blockiert mein Auslesen von InputStream unendlich lange und mein Program bleibt hängen.
Wenn ich jetzt aber den ErrorStream nach vorne schiebe, dann habe ich genau die gleiche Situation andersherum, nämlich wenn nie was in den Errorstream geschrieben wird. Aber ich finde bei InputStream auch kein wait, welches eine Zeitbeschränkung mit übergeben bekommt.
Kann ich das mit irgend einer anderen Klasse vielleicht machen? (ich weiß, ist eine noob-frage aber vll. mit BufferedReader?).
Den ErrorStream lese ich in einer Whileschleife mit in.read() aus.
Den InputStream mit new java.util.Scanner(in).useDelimiter("\\A").next();
lg
folgendes Problem. Ich starte ein Program per Runtime.getRuntime().exec(..)
Anschließend hole ich mir per getInputStream() und getErrorStream() jeweils die Streams um sie auszulesen.
Nun habe ich aber ein Problem bei der korrekten Reihenfolge.
Normalerweise lese ich zuerst den getInputStream aus.
Nun ist es aber ab und zu möglich, dass ich dem exec eine fehlerhafte Datei übergebe und dann wird gar nix in den InputStream geschrieben, sondern nur in den Errorstream. Daher blockiert mein Auslesen von InputStream unendlich lange und mein Program bleibt hängen.
Wenn ich jetzt aber den ErrorStream nach vorne schiebe, dann habe ich genau die gleiche Situation andersherum, nämlich wenn nie was in den Errorstream geschrieben wird. Aber ich finde bei InputStream auch kein wait, welches eine Zeitbeschränkung mit übergeben bekommt.
Kann ich das mit irgend einer anderen Klasse vielleicht machen? (ich weiß, ist eine noob-frage aber vll. mit BufferedReader?).
Den ErrorStream lese ich in einer Whileschleife mit in.read() aus.
Den InputStream mit new java.util.Scanner(in).useDelimiter("\\A").next();
lg