# Schleife per Tastendruck abbrechen



## seth.gecko (23. Jan 2009)

Hey leute...

Ich schreibe gerade eine diskrete Simulation - die sollte per Tastendruck abgebrochen werden.

Ich hab schon den Tipp bekommen das ich in einem zweiten thread System.in.read zum 'hören' aufrufen soll.

also ich habe jetzt eine Thread:



```
Thread ListenerThread extends Thread {

boolean isRunning;

public void run() {

    while (isRunning) {

--------------> jetzt weiß ich aber nicht wie das syntaxkorrekt zu formierlen ist
--------------> es soll hier immer per system.in abgefragt werden ob taste gedrückt wurde, aber wie schreib ich da??
    }

}
```

danke schonmal.


----------



## SlaterB (23. Jan 2009)

schreibe
System.in.read();

und das Programm wird solange blockieren, bis jemand Enter drückt,
auf andere Zeichen kannst du nicht direkt reagieren ohne JFrame & Co.

außerdem ist zu beachten, dass read() nur ein Zeichen liest,
wenn jemand "Test[Enter]" eintippt, dann braucht es 4x read() bis wieder blockiert wird

besser mit einem BufferedReader + readLine() eine ganze Zeile einlesen


----------



## Java-Problems (23. Jan 2009)

```
while (true){
              hier deine Aktion (vermutlich eine Eingabe)

     if (eingabe.equals(""){
    return false;}
```

Dies wäre eine Möglichkeit, das Problem zu lösen!


----------



## seth.gecko (23. Jan 2009)

SlaterB hat gesagt.:
			
		

> schreibe
> System.in.read();
> 
> und das Programm wird solange blockieren, bis jemand Enter drückt,
> ...



hmm es soll ja nicht blockieren bis jemand enter drückt... das wäre ja quasi starten per taste
es soll ja laufen bis jemand enter drückt


----------



## SlaterB (23. Jan 2009)

deswegen ja 'zwei Threads',
einer macht das was ich beschrieben habe, und setzt nach Ende des Blockierens vielleicht eine boolean-Variable auf false,

der andere arbeitet vor sich hin und schaut alle x Sekunden vorbei, ob das boolean-Flag geändert wurde


----------



## seth.gecko (23. Jan 2009)

kannste mir nicht schnell ein codebeispiel geben für den abbruch?


----------



## Java-Problems (23. Jan 2009)

```
String input = IOTools.readLine("Title?: ");

while (true){
    if (!input.equals("")){
        System.out.println("Eingabe war erfolgreich!);
    }
    else { System.err.println("Eingabefehler");
              break;
    }
}
```

dann wird das Programm bei Drücken von "Enter"-Taste abgebrochen


----------



## SlaterB (23. Jan 2009)

@patrickN
99% aller Java-Programmierer kennen keine IOTools,
und wieso eine Schleife, wenn du nur vorher einmal eine Zeile einliest?

die Schleife wird entweder sofort abgebrochen oder endlos durchlaufen

----

mehr Beispiel gibts von mir aber nicht, erstmal selber anfangen, einlesen usw,


----------

