# wie bufferedreader.readline() unterbrechen?



## virtualAudio (13. Okt 2009)

Hi Leute,

wie kann ich denn einen BufferedReader dazu bringen sein readLine() auf den Standard-Input abzubrechen?

folgendes kleines Programm soll zeigen was ich meine;


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class TestReadLineKillMain {

	public static void main(String[] args) {
		
		final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Thread t1 = new Thread(){
			public void run(){
				while(true){
					System.out.println("t1 running...");
					try {
						String s = br.readLine();
						System.out.println("out: "+s);
					} catch (IOException e) {
						Message.error("killed...juchuii");
					}
				}
			}
		};

		Thread t2 = new Thread(){
			public void run(){
				try {
					System.out.println("t2 running...");
					sleep(3000);
					System.out.println("br.close()...");
					br.close();
					System.out.println("br.closed!!");
				} catch (Exception e) {}
			}
		};

		t1.start();
		t2.start();
	}
}
```

Ich hab eigentlich erwartet, dass in der Zeile von readLine eine Exception geworfen wird. So wie man es zB von sleep kennt (InterruptedException)...Tut es aber nicht... br funktioniert tadellos weiter

Konsolen Output ist:

```
t1 running...
t2 running...
br.close()...
```


close wartet und wartet und....

Kann mir da jemand einen Tipp geben?
lG Andi


----------



## ralfgc (13. Okt 2009)

Hallo,

also erstens bin ich mir nicht sicher was du mit dem code bezwecken willst.

Der Thread t1 läuft natürlich weiter so lang die Anweisung String s = br.readLine();
noch wartet. Deiner Erwartung zufolge sollte eine Exception geworfen werden
wenn du in einem anderen Thread früher den BufferedReader schließt obwohl er noch
im "readline" wartet. 

Das ist alles bissel komisch was du da vor hast, was willst du damit bezwecken?


----------



## SlaterB (13. Okt 2009)

> System.out.println("br.closed!!");
kommt nicht?

> } catch (Exception e) {}
traurig, hier könnten Informationen herkommen


----------



## virtualAudio (13. Okt 2009)

Hi, danke für die Antwort!

Sie hat mich sozusagen schon auf die Lösung gebracht 

Ich beende nicht den Reader, ich beende natürlich den Stream. Somit lässt der Reader vom Stream ab und alles ist gut 

Das ganze steckt in einem Server, der beim Beenden aus seinen wartenden socket-Verbindungen raus muss.

Alles ganz easy...

Danke, lg Andi


----------



## virtualAudio (13. Okt 2009)

SlaterB hat gesagt.:


> > } catch (Exception e) {}
> traurig, hier könnten Informationen herkommen



Nein, nein... die catch-Blöcke habe ich nur hier klein gehalten, damit der Code möglicht kurz ist.

Ein Aufruf der close() Methode hält den Thread an, bis der dem Reader zugewiesene Stream beendet wurde. 

lg Andi


----------

