Zum Inhalt springen

Problem mit Schleife beim Streamreader


Crackster

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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