Crackster Geschrieben 23. März 2005 Geschrieben 23. März 2005 Hallo zusammen!! Ich hab folgendes Problem, und zwar will ich eine Schleife machen, welche so lange läuft bzw liest, bis das Ende eines Streams erreicht wird. Sobald das Ende eines Streams erreicht wird, hängt jedoch das Programm. Welche Möglichkeit schlagt ihr vor? while (!(reader.readLine().equals(null))) { line = reader.readLine(); System.out.println(line); } Vielen Dank für eure Hilfe!! Zitieren
kingofbrain Geschrieben 23. März 2005 Geschrieben 23. März 2005 Du liest in der Schleife nochmal, das kann aber dann ja schon null sein. Probier mal sowas: while((line = reader.readLine()) != null) Ich habe noch nie bei null geequalt, deshalb kann ich dazu nichts sagen. Aber mit != geht es. Peter Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Hab ich auch schon probiert, genauso auch schon auf "" sowie eben null mit equals und != überprüft, aber er hängt jedesmal beim Erreichen des Ende vom Stream. Es muss doch eine Möglichkeit geben, dass die Schleife so lange läuft, solange das Ende des Streams nicht erreicht ist und dann ohne Fehler die Schleife beendet. Zitieren
Biese Geschrieben 23. März 2005 Geschrieben 23. März 2005 tztz... Ihr könnt die Methode Equals() nicht bei einem Null-Objekt aufrufen. Dann lauft ihr ins offene Nullpointer-Messer !!! Drum kommt ihr ums !=null nicht herum. Denn wenn die Schleife bei objekt.equals(null) abgebrochen werden soll, kann ja nix dabei herumkommen... denn dann ist das 'Objekt' ja schon null und hat keine Methoden mehr... Übrigens: ein Reader springt immer eine Zeile weiter, wenn readline aufgerufen wird. Du fragst, ob readline null ergibt, um in die schleife zu kommen ,und in der schleife nochmal readline, um an einen Wert zu kommen. Damit springst Du dann immer 2 Schritte nach vorn. Dann ist klar, dass Du am Ende in einen Fehler läufst... Probier mal String zeile=null; while( !(zeile=reader.readline())!=null){ System.out.rpintln(zeile); } Zitieren
perdian Geschrieben 23. März 2005 Geschrieben 23. März 2005 Ich würde zur besseren Übersicht sowas schreiben - ist zwar ein bisschen mehr Code, aber da geht klar draus hervor, was passiert: String line = reader.readLine(); while(line != null) { System.out.println(line); line = reader.readLine } Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Oh man, funktioniert beides nicht, ich will doch nur eine ganz normale Statusabfrage an den Drucker über TCP/IP schicken, dabei einen Stream benutzen, diesen in einer Schleife auslesen, ohne dass er sich am Ende jedesmal aufhängt, sobald er auf null bzw. auf das Ende stößt, bitte helft mir... Zitieren
Biese Geschrieben 23. März 2005 Geschrieben 23. März 2005 while( !(zeile=reader.readline())!=null) *räusper* Ok, das war jetzt wirklich mal eine selten doofe idee :-)) Es muss hier natürlich heißen while( (zeile=reader.readline())!=null) (ohne die doppelte negation.. *hüstel* ) Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Hey Biese!! Da bin ich auch gleich drauf gekommen, dass ich das erste ! weglassen muss, hat aber deswegen auch nicht funktioniert... IDEE? Zitieren
Biese Geschrieben 23. März 2005 Geschrieben 23. März 2005 Oh man, funktioniert beides nicht, ich will doch nur eine ganz normale Statusabfrage an den Drucker über TCP/IP schicken, dabei einen Stream benutzen, diesen in einer Schleife auslesen, ohne dass er sich am Ende jedesmal aufhängt, sobald er auf null bzw. auf das Ende stößt, bitte helft mir... hm... das kann dan wohl daran liegen, dass Du eine Netzwerk verbindung hast... Denn der Stream bleibt solange geöfnet, bis die Verbindung abbricht... damit "Hängt" das programm nicht, sondern wartet, bis neue Infos über den Stream reinkommen... Das ist nun wieder was anderes... Das Programm terminiert hier erst dann, wenn Du oder der Drucker die Verbindung abbrechen. Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Klingt logisch, aber hast du einen Lösungsvorschlag, wie man das Problem dann abfängt? Zitieren
Biese Geschrieben 23. März 2005 Geschrieben 23. März 2005 Schau mal nach, was das letzte ist, dass du über den Stream geschickt bekommst. Vielleicht schickt Dir der Drucker eine Art "GODDBYE" oder sowas... Prüfe, ob ein solches Wort am Ende der Zeile vorkommt. Ist das der Fall, dann trenne die TCP Verbindung. Dann sollte das Programm ganz normal aus der Schleife kommen. String line = reader.readLine(); while(line != null) { System.out.println(line); if(line.indexOf("GOODBYE-WORT")> -1){ tcpSocket.close(); } line = reader.readLine } Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Er schickt eben nichts in dieser Richtung, das letzte was kommt ist eine Speichergröße, die ändert sich aber auch ständig... Zitieren
Biese Geschrieben 23. März 2005 Geschrieben 23. März 2005 Dann prüf mal, ob es sowas wie ein Protokoll gibt, das diese Kommunikation beschreibt. Vielleicht kannst Du ja Zeilen zählen, und nach n Zeilen abbrechen... irgendwass wird sich schon finden... Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Das Problem ist, dass selbst die Zeilenanzahl unterschiedlich ist, bzw. keine Struktur, nach der irgendwann abgebrochen werden kann, vorhanden ist... Zitieren
Biese Geschrieben 23. März 2005 Geschrieben 23. März 2005 Kannst Du diesen Statusbericht hier mal posten ? Vielleicht lässt sich da doch irgendwas machen. Reagiert der Drucker auch auf Befehle, die Du ihm schickst ? Zitieren
Crackster Geschrieben 23. März 2005 Autor Geschrieben 23. März 2005 Hey Biese!! Hab ne Lösung gefunden, mach es jetzt über die Größe: int bufferSize = 512; int length = 0; char[] result = new char[bufferSize]; while ((length = reader.read(result, 0, bufferSize)) != 0) { for (int i = 0; i < length; i++) { if (result == 13) { System.out.print("{CR}:[13]\n"); } else { System.out.print(result); } } if (bufferSize - length != 0) { break; } } Was sagst du dazu? Trotzdem Merci dir!! Zitieren
speedi Geschrieben 24. März 2005 Geschrieben 24. März 2005 du gehst bei jeden durchlauf der Schleife um zwei zeilen weiter deshalb bekommst du eine NullPointerException wenn du diesen Code verwendest: while ((reader.readLine().equals(null))!=true) { line = reader.readLine(); System.out.println(line); } Übrigens wenn du eine Datei mit gerader Zelenanzahl liest dürfte es klappen. Nur fehlt dir halt jede zweite zeile. Versuchs mal so: String line; while((line=reader.readLine())!=null){ System.out.println(line); } Zitieren
Biese Geschrieben 24. März 2005 Geschrieben 24. März 2005 Versuchs mal so: String line; while((line=reader.readLine())!=null){ System.out.println(line); } *lol* siehe Thread... Letztens habe sie nen Pharao ausgegraben. Der Hatte n Buch Ãn der Hand, in dem diese Idee schon durchgestrichen war ;-)) hehe @Crackster. Wie kommst Du denn nach der Schleife in die IF-Abfrage, wenn Du doch eigentlich garnicht aus der Schleife raus gekommen bist ??? *gübel* Oder hab ich die ganze Zeit das Problem verrafft?? Zitieren
Crackster Geschrieben 24. März 2005 Autor Geschrieben 24. März 2005 DAs IF liegt ja innerhalb der Schleife und das beste ist, dass es funktioniert... ;-) Zitieren
Biese Geschrieben 24. März 2005 Geschrieben 24. März 2005 Ok, dann hab ich wohl die Klammern nicht mitgezählt... Und da sag mal einer, dass die Größe nicht zählt *g* Apropos Größe: die coolste Oracle Fehlermeldung die ich mal gesehen habe: "Eingefügter Wert zu groß für Spalte" - hrhrhr -eng muss sie sein die Spalte - eng Zitieren
speedi Geschrieben 24. März 2005 Geschrieben 24. März 2005 *lol* siehe Thread... Letztens habe sie nen Pharao ausgegraben. Der Hatte n Buch Ãn der Hand, in dem diese Idee schon durchgestrichen war ;-)) hehe Ja hast schon recht aber gehe mal die Schleife im Kopf durch die ich vorhin wie ähnlich wie schon jemand vor mir gepostet habe. Du müsstest mir rechtgeben können das es eigentlich bei keiner Konsistenten Datei der Welt ein Problem geben dürfte. Vielleich wäre es ganz gut wenn Crackstar mal alles Posten würde was in irgendeiner Weise mit dem Lesen der Datei zusammen hängt. Zitieren
Crackster Geschrieben 24. März 2005 Autor Geschrieben 24. März 2005 StringBuffer response = new StringBuffer(); int bufferSize = 512; int length = 0; char[] result = new char[bufferSize]; while ((length = reader.read(result, 0, bufferSize)) != 0) { response.append(result); if (bufferSize - length != 0) { break; } } Zitieren
Biese Geschrieben 24. März 2005 Geschrieben 24. März 2005 Du müsstest mir rechtgeben können das es eigentlich bei keiner Konsistenten Datei der Welt ein Problem geben dürfte. [Edit: falsches Zitat*g*] *rechtgeb* Eine Datei war auch nicht das Problem :-) Es ging um eine TCP Connection. Zitieren
Crackster Geschrieben 24. März 2005 Autor Geschrieben 24. März 2005 TCP ist ja im Grunde genommen in dem Fall nichts anderes als ne Datei, weil du einfach den Reader auf die TCP-Verbindung setzt und diese dann eben ausliest druckerSocket = new Socket(); InetSocketAddress druckerSocketAddress = new InetSocketAddress("IP", Port); druckerSocket.connect(druckerSocketAddress, 10000); druckerSocket.setSoTimeout(10000); System.out.println("Connected to IP:PORT"); writer = new BufferedWriter(new OutputStreamWriter( druckerSocket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(druckerSocket. getInputStream())); Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.