readLine() von BufferedReader hält das Programm fest/auf!

Status
Nicht offen für weitere Antworten.

Novanic

Bekanntes Mitglied
Hi Leute,

ich hab hier ein ganz merkwürdiges Problem.
Ich habe eine Klasse die Befehle/Programme ausführt und die Rückgabewerte in einen BufferedReader steckt.
Wenn ich z.B. "help" oder "java" ausführen lasse, kann mein Programm schön die Ausgaben in eine Collection packen (liest vom BufferedReader mit "readLine()").
Wenn ich jetzt aber "javac" ausführe, bleibt mein Programm einfach stehen und zwar genau an der Stelle von dem Aufruf von "readLine()".

Ich hab testweise mal etwas probiert, um es zu beweisen ("in" ist der BufferedReader):

Code:
System.out.println("Test1");
in.readLine();
System.out.println("Test2");

Es wird "Test1" ausgegeben, aber "Test2" wird nie ausgegeben. Wenn ich z.B. "help" oder "java" ausführe, läuft das wunderbar. Wenn ich die drei Befehle manuell auf der Konsole teste, kommt auch überall Text zurück.

Mit dem Debugger kann ich auch nicht in die in "readLine()" reinspringen, hängt sich da auch auf... Wodran kann das denn liegen, dass der BufferedReader sich da einfach gnadenlos aufhängt?

Vielen Dank im Voraus! :)

Gruß Nova
 

madboy

Top Contributor
Hi Novanic,

Meines Wissens blockiert readLine() so lange, bis eine Zeile eingelesen worden ist (also mit \n oder \r abgeschlossen). Wenn Du ein Programm ausführst, das weder \n noch \r zurückgibt, blockiert Dein readLine() ewig.

Gruß,
madboy
 

Novanic

Bekanntes Mitglied
Hm, und hast du auch eine Idee wie man sonst an den output kommen könnte? :)

Danke für die Antwort. :)

Gruß Nova
 

lhein

Top Contributor
Ich würde mal vermuten:

read Methode benutzen und selber für Zeilenumbrüche sorgen

Dann bist nicht auf den externen Linebreak angewiesen.

lr
 

Novanic

Bekanntes Mitglied
Hm, also bei der read()-Methode hängt er sich genauso auf. Hättest du vielleicht einen Lösungsansatz für deine Idee? :)

Danke. :)

Gruß Nova
 

lhein

Top Contributor
Hab sowas noch nie programmiert, daher kann ich adhoc nix vorschlagen.

Müsste ich erst selber mit experimentieren...aber heut abend sicher nimmer.

lr
 

norman

Top Contributor
dein oben geposteter block steht sicherlich in einem try-catch-block, oder? vermutlich wird der bei in.readLine wg einem fehler abgebrochen.
kannst du nicht die ganze methode posten?
 

tomcat

Mitglied
Hallo Zusammen,

es freut mich zu hören, das nicht nur ich das Problem habe, ich wollt mich nämlich gerade mal dransetzen um einen Post dazu zu schreiben.

also ich kann die Erfahrung vom Novanic bestätigen, ich bastel mir auch aus einem Config File eine Programmaufrauf einer exe zusammen, der auch so korrekt ist und innerhalb eines Eingabefensters ausgeführt wird. Sobald ich das Programm allerdings über Java starten will (jeweils mit readline() und read() versucht) bleib er nach einer zeile stecken obwohl definitiv noch 3 kommen müßten.

ich hab auch spaßeshalber mal versucht, über den

Code:
pr.getErrorStream().read()

zu lesen, falls er die folgenden Ausgaben nur noch über den Stderr schreibt. Hat aber auch nix weiter geholfen.

Ich wäre daher auch sehr an einer Lösung dieses Problems interessiert.... ???:L

Danke schon mal und hoffentlich fällt jemanden was dazu ein.

Schöne Grüße

tomcat
 

tomcat

Mitglied
Code:
procout = new BufferedReader(new InputStreamReader(pr.getInputStream())); //wobei pr ein prozess ist 
try{
   while((line = procout.readLine()) != null){
	System.out.println("Ausgabe: " + line);
   }
}catch(IOException e){
    System.out.println("Es ist eine IOException beim Auslesen der Prozessausgaben aufgetreten: "+ e.toString());
}

also ich hab mal mein Beispiel genommen, ich vermute das wird auch das Grundprinzip verdeutlichen.
Die IOException wird bei einem Fehler geworfen, aber Sie wird bei mir nie ausgegeben, von daher ist ein Fehler vermutlich auch recht unwahrscheinlich ?!?

Gruß

tomcat
 

Novanic

Bekanntes Mitglied
Also ich hab immernoch keine Lösung für das Problem gefunden. :-(

Ich hoffe hier kann jemand helfen, ich geb euch hier mal einen Codeausschnitt. Wenn man als myCommand (Befehl als String) z.B. "help" oder "java" angibt, bekommt man alle Zeilen zurück. Gibt man aber "javac" ein, friert alles an der Zeile "in.readLine()" ein.
Hat jemand eine Idee wie sich das so umbauen lässt, dass es auch bei "javac" funktionieren würde (wenn Zeilen nicht mit "\r\n" beendet wurden)?

Code:
    private BufferedReader getProcessReader() throws IOException
    {
        Runtime theRuntime = Runtime.getRuntime();
        Process theProcess = theRuntime.exec(myCommand);

        InputStream theInputStream = theProcess.getInputStream();

        return new BufferedReader(new InputStreamReader(theInputStream));
    }

    public Collection getInputCollection()
    {
        Collection theData = new ArrayList();
        String str;

        try {
            BufferedReader in = getProcessReader();

            while((str = in.readLine()) != null)
            {
                theData.add(str.trim());
            }
        } catch(IOException e) {
            System.out.println("Fehler beim Lesen des InputStreams.");
        }

        try {
            aProcess.waitFor();
        } catch (InterruptedException e) {
            System.out.println("Es ist eine InterruptException aufgetreten ...");
        }

        return theData;
    }

Vielen Dank schonmal! :)

Gruß Nova
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K BufferedReader.readLine erkennt Zeilenende nicht Allgemeine Java-Themen 11
A bufferedReader readline, encoding Allgemeine Java-Themen 5
V wie bufferedreader.readline() unterbrechen? Allgemeine Java-Themen 4
D BufferedREader#readLine Allgemeine Java-Themen 20
J BufferedReader br.readLine(); Allgemeine Java-Themen 22
conan2 BufferedReader.readLine() von anderem Thread aus beenden Allgemeine Java-Themen 4
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
S readLine() liest nur jede 2. Zeile Allgemeine Java-Themen 3
P readLine() liest nur jede dritte Zeile? Allgemeine Java-Themen 3
J RandomAccessFile readLine(); Allgemeine Java-Themen 5
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S readLine oder sowas? Allgemeine Java-Themen 13
R read/readline blockiert Allgemeine Java-Themen 5
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
kodela Unterschiedliches Verhalten von BufferedReader Allgemeine Java-Themen 3
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
A BufferedReader ohne System.in Allgemeine Java-Themen 9
J BufferedReader Datei einlesen Allgemeine Java-Themen 8
Messoras Der BufferedReader mag mich nicht Allgemeine Java-Themen 47
C Threading mit BufferedReader/InputStream & sockets Allgemeine Java-Themen 0
J BufferedReader OutOfMemory umgehen? Allgemeine Java-Themen 10
B Input/Output BufferedReader Allgemeine Java-Themen 3
O BufferedReader von ganz unten anfangen zu lesen Allgemeine Java-Themen 7
S BufferedReader/PrintWriter an einer HTML Allgemeine Java-Themen 6
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
D 'InputStreamReader' & 'BufferedReader' führen zu "cannot find symbol"-Fehler Allgemeine Java-Themen 3
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
Developer_X Java BufferedReader mit URL Allgemeine Java-Themen 5
Semox Fehler - Zuweisung aus BufferedReader an Variable Allgemeine Java-Themen 3
S Exception beim BufferedReader Allgemeine Java-Themen 3
G getFilePointer in BufferedReader? Allgemeine Java-Themen 2
D (BufferedReader) inLine() "verschluckt" zeilen ? Allgemeine Java-Themen 2
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
W Frage zu BufferedReader Allgemeine Java-Themen 2
K Wie kann ich einen BufferedReader beschleunigen? Allgemeine Java-Themen 4
B while mit BufferedReader beenden Allgemeine Java-Themen 5
F Zu große Werte beim byteweisen Lesen mit BufferedReader.read Allgemeine Java-Themen 5
S BufferedReader problem Allgemeine Java-Themen 11
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
M BufferedReader input - hängt sich auf Allgemeine Java-Themen 4
C Probleme mit URL und BufferedReader Allgemeine Java-Themen 6
C BufferedReader oder DataInputStream Allgemeine Java-Themen 4
M Store a String in a BufferedReader Allgemeine Java-Themen 2
B neuroph hält beim XOR lernen nicht an Allgemeine Java-Themen 13
B Compiler-Fehler Das Programm hält nicht Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben