# Warten, bis keine Taste gedrückt



## Guybrush Threepwood (6. Okt 2010)

Hi,
ich stehe gerade auf dem Schlauch. Wie man einen Tastendruck abfragt weiß ich. Nun die umgekehrte Aufgabenstellen: Wie kann ich ein Programm so lange warten lassen, bis keine Taste mehr gedrückt ist?

Danke,
  Guybrush


----------



## FArt (6. Okt 2010)

Swing? Am KeyEvent kannst du auch sehen, ob eine Taste gedrückt oder losgelassen wird.
How to Write a Key Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)


----------



## ?!?!? (6. Okt 2010)

Mit einer boolischen Instanzvariable?!? ...


----------



## ?!?!? (6. Okt 2010)

Vergiss mein Kommentar ... das was FArt erwähnte ist das was du womöglich suchst.


----------



## Guybrush Threepwood (6. Okt 2010)

Wie das mit den KeyListenern funktioniert weiß ich schon. Aber gibt es eine globale Möglichkeitsicherzustellen, ob Tasten gedrückt sind? Der KeyPressed-Event wird ja dann ausgelöst, wenn eine Taste gedrückt wird. Nun kann es ja sein, dass die Taste bereits gedrückt ist, wenn der Programmcode abgearbeitet wird.


----------



## FArt (6. Okt 2010)

Guybrush Threepwood hat gesagt.:


> Wie das mit den KeyListenern funktioniert weiß ich schon. Aber gibt es eine globale Möglichkeitsicherzustellen, ob Tasten gedrückt sind? Der KeyPressed-Event wird ja dann ausgelöst, wenn eine Taste gedrückt wird. Nun kann es ja sein, dass die Taste bereits gedrückt ist, wenn der Programmcode abgearbeitet wird.



Nicht vermuten, sondern Doku und Tutorial lesen und verstehen.
Aus der API Doku zum KeyEvent:


> "Key pressed" and "key released" events are lower-level and depend on the platform and keyboard layout. They are generated whenever a key is pressed or released, and are the only way to find out about keys that don't generate character input (e.g., action keys, modifier keys, etc.). The key being pressed or released is indicated by the getKeyCode method, which returns a virtual key code.


----------



## Guybrush Threepwood (6. Okt 2010)

Lass gut sein, die Doku und die API kenne ich: Man kann abfangen, wenn ein Key (rein-)gedrückt oder losgelassen wird. Ich suche aber nach einer Methode, die mir die Abfrage ermöglicht, ob irgend eine Taste gehalten wird.


----------



## VfL_Freak (6. Okt 2010)

Moin,

vlt. dies hier:
Tastatureingabe "while(key.pressed)" abfangen ? - Forum Fachinformatiker.de

Gruß
Klaus


----------



## dku (6. Okt 2010)

hätte es jetzt auch so gelöst wie im Link von VfL_Freak.


keyPressed(KeyEvent) wird allerdings mehrfach aufgerufen, keyReleased(KeyEvent) nur einmal.
Denke ersteres ist von der Betriebssystemeinstellung abhängig wie schnell da die Wiederholrate ist (nur eine Vermutung).

Magst du uns verraten was du vor hast? Vielleicht gibts dann noch andere Ansätze.


----------



## FArt (6. Okt 2010)

Guybrush Threepwood hat gesagt.:


> Hi,
> ich stehe gerade auf dem Schlauch. Wie man einen Tastendruck abfragt weiß ich. Nun die umgekehrte Aufgabenstellen: Wie kann ich ein Programm so lange warten lassen, bis keine Taste mehr gedrückt ist?
> 
> Danke,
> Guybrush





Guybrush Threepwood hat gesagt.:


> Lass gut sein, die Doku und die API kenne ich: Man kann abfangen, wenn ein Key (rein-)gedrückt oder losgelassen wird. Ich suche aber nach einer Methode, die mir die Abfrage ermöglicht, ob irgend eine Taste gehalten wird.



"Bis keine Taste mehr gedrück ist" ist ein wenig was anderes als "ob irgend eine Taste gehalten wird".

Ich sehe es auch so: sag mal genau was du machen willst, vermutlich bist du mit dem Ansatz auf dem Holzweg.


----------



## Guybrush Threepwood (7. Okt 2010)

Hallo FArt,
ja, ich denke Du hast recht. Ich muss es konzeptionell anders angehen. Es handelt sich um ein Reaktionszeitexperiment, genauer gesagt der Stroop-Effekt. Es müssen Tasten gedrückt werden und ich will abfangen, wenn jemand eine Taste gedrückt hält. Vermutlich werde ich einen weiteren Thread einbauen, der bestimmte Phasen des Ablaufs für kurze Zeit anhält, und es geht erst weiter, wenn einige Zeit (50 ms oder so) keine KeyEvents gefeuert werden. 
Vielen Dank Euch allen für die Tipps!

Ciao,
  Guybrush


----------



## Guybrush Threepwood (7. Okt 2010)

Aaaaaaarrrrrgggghhhh!!!! Es war soooo einfach! Ich rufe schlicht und einfach in meinem KeyListener die aktuelle Systemzeit ab und lasse dann an der entsprechenden Stelle den Thread pausieren, solange, in den letzten 200 ms ein KeyEvent auftrat. Manchmal denkt man einfach in die falsche Richtung!


----------

