# KeyListener auf Konsole



## JRoxx (23. Jan 2007)

Hallo,

wie kann ich in der Konsole auf KeyEvents reagieren, parallel zum eigentlichen ablauf des programms.

sozusagen einen KeyListener für die Konsole (?)

zb, dass wenn jemand während des programmsablaufs eine taste drückt, wird ein text ausgegeben...

danke!

gruß


----------



## André Uhres (24. Jan 2007)

Meinst du einen Thread starten der die Konsole liest?


----------



## The_S (24. Jan 2007)

Das geht nicht. Du kannst nur von der Konsole einlesen wenn der User Return drückt.


----------



## @fh (24. Jan 2007)

ok, danke.


----------



## JPKI (24. Jan 2007)

Probiers doch mal mit dem Auslesen von InputStream System.in, etwa so:


```
public static void main(String args[]) {

 BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));

 String input;

 while ((input = buffer.readLine()) != null)
  System.out.println(input);
 }
}
```


----------



## JPKI (24. Jan 2007)

Sorry, ich hab da oben vergessen die IOException abzufangen!


----------



## JRoxx (24. Jan 2007)

wie soll das funktionieren?

ich will ja kein Zeichen einlesen, sondern während des ablaufenden Hauptprogramms (Thread) auf ein KeyEvent reagieren...das scheint aber nicht zu gehen.


----------



## JPKI (24. Jan 2007)

Definier doch eine Klassenvariable, und starte einen zweiten Thread, der den Inputstream ausliest. Verwende doch nur InputStream und lies es byteweise aus, und konvertiere es anschließend in ein char oder integer. dann hast du (fast) sowas wie einen KeyListener.


```
import java.io.*;

public class KeyListenerErsatz {

  public static void main(String args[]) throws IOException {

   char test;

   while (true) {

    test = (char) System.in.read();
    System.out.print(test);

/*
 * Hier könntest du auch eine Methode wie z.B. keyPressed() aufrufen (ohne KeyListener zu implementieren)
 * und das char als Parameter übergeben.
 *
 * Natürlich kannst du das hier auch in einem Extrathread starten, um es parallel zum Programm ablaufen zu
 * lassen.
 *
 * Probiers einfach aus.
 */
  }
 }
}
```

usw...


----------



## JPKI (24. Jan 2007)

Mal ganz nebenbei ne Frage an die alten Hasen in diesem Forum:

Ich bin grad zu faul um den ganzen Quellcode für den KeyListener durchzugehen. Kann es sein, dass die Klasse KeyListener auch den System.in-InputStream verwendet (Nur so aus Interesse)?


----------



## Illuvatar (24. Jan 2007)

Äh, sorry, JPKI, aber da müsste ich kein alter Hase sein - und alt bin ich nun auch wirklich nicht  - um festzustellen, dass du Unsinn schreibst...

 a) Man kann aus System.in nur zeilenweise einlesen. PUNKT. wenn du read() machst, blockiert das, bis eine Zeile gelesen ist, und gibt dann nacheinander die Werte zurück.
 b) Ein KeyListener ist etwas sowas von total anderes... Ein KeyListener reagiert auf die Windows-Messages, die ein Window kriegt. System.in ist ein Eingabestream von der Konsole. KeyListener funktioniert auch ohne Konsole, und vice versa.


----------



## JPKI (25. Jan 2007)

Ist ja gut...


----------

