Zum Inhalt springen

Problem mit Schleife beim Streamreader


Empfohlene Beiträge

Geschrieben

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!!

Geschrieben

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

Geschrieben

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.

Geschrieben

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);

}

Geschrieben

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

}

Geschrieben

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...

Geschrieben

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* )

Geschrieben
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.

Geschrieben

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

}

Geschrieben

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...

Geschrieben

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!!

Geschrieben

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);

}

Geschrieben

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??

Geschrieben

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

Geschrieben
*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.

Geschrieben

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;

}

}

Geschrieben

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.

Geschrieben

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()));

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...