# while Schleife ausführen solange eine Taste gedrückt ist



## _Gerret_ (12. Nov 2012)

Hi!

Ich möchte eine while Schleife solange ausführen, solange j gedrückt ist.
z.B.


```
while(keyispressed){
    System.out.println("ispressed");
}
```
(Pseudocode)

Wäre schön wenn mir das jemand, simple erklären könnte.


----------



## MiDniGG (12. Nov 2012)

KeyListener der Anwendung hinzufügen.
keyPressed-Methode überschreiben, boolean auf true setzen und while-Schleife (am Besten in extra Thread) starten.
keyReleased-Methode überschreiben und boolean auf false setzen.


----------



## _Gerret_ (12. Nov 2012)

Danke für deine Hilfe! 

Soweit war ich auch schon, hab eher ein problem beim erstellen des KeyEvents und wie ich das keyPressed dann am besten verarbeite.


```
package test;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Main {

    public static void main(String[] args) {
        KeyListener kl = new KeyListener();
        
        KeyEvent event = new KeyEvent(null, 0, 0, 0, 0);
        
        kl.keyPressed(event);
        
        while(ispressed){
            System.out.println("pressed");
        }
    }
}
```
(!!Fehler im Code!!)

Wie meinst du das mit überschreiben?

Das ergebniss sollte sein, dass ich das Programm ausführe (eclipse), das Programm in einem "IDLE" Modus, auf den Tastendruck wartet und die while Schleife solange ausführt wie die Taste gedrückt ist. Danach sollte er wieder im idle warten bis ich das programm stoppe.

Könntest du mir ein Beispiel zeigen (Falls es dir nicht zu viel arbeit ist )?


----------



## FerFemNemBem (12. Nov 2012)

Mahlzeit,

Du kannst an der Konsole keinen KeyListener registrieren. Was willst Du denn eigentlich machen?

Gruss, FFNB.


----------



## _Gerret (12. Nov 2012)

Das nicht. Aber ich kann das Programm ja ausführen, oder nicht? Robot funktionen haben so auch funktioniert.

Ich such eine methode, in der ich live abprüfe ob j gedrückt wird.


----------



## FerFemNemBem (12. Nov 2012)

Mahlzeit,

an Componenten kannst Du Keylistener konfigurieren, in der Konsole geht das wie gesagt nicht. Du koenntest evtl. kontinuierlich von System.in lesen und checken, ob "j" dabei ist.

Gruss, FFNB.


----------



## _Gerret_ (12. Nov 2012)

Also von der console einlesen würde in meinem fall nicht funktionieren weil das programm im hintergrund liegen kann, soll aber trotzdem die schleife ausführen. Hab leider noch keine erfahrung mit dem KeyListener und kenn auch keine andere merhode mit der ich das problem lösen könnte.

Was schlägst du mir sonst vor? 

  mfg


----------



## FerFemNemBem (12. Nov 2012)

Mahlzeit,

dann wird es ja gleich extrem schwierig. Du moechtest also, auch wenn Dein Fenster (Konsole oder was auch immer) keinen Focus hat, die Tastatur abfragen z.B. wenn jemand in TextPad oder Browser eine Taste drueckt, reagieren. Quasi sowas wie ein Keylogger? Dann wirst Du um JNI nicht herumkommen.

Gruss, FFNB.


----------



## trööhööt (13. Nov 2012)

wie gesagt : an eine console kann man keine GUI-listener hängen ... dafür brauchst selbstverständlich GUI-klassen ... und wenn es doch im background laufen soll kommst du an einem global-keylogger nicht rum ...


mal davon abgesehen das es das thema hier schon mehr als mehrfach gab hattest du scheinbar einfach das problem das du nicht wusstest wonach du suchen sollst ...

aber da man die frage immer wieder liest hier der direkt link zu einem sehr einfach global-logger :  Java – Global (low level) Keyboard / Mouse Hook – JNI kSquared.de – Blog


----------



## faetzminator (13. Nov 2012)

Siehe auch: http://www.java-forum.org/awt-swing-swt/126489-globaler-keylistener.html


----------



## trööhööt (13. Nov 2012)

faetzminator hat gesagt.:


> Siehe auch: http://www.java-forum.org/awt-swing-swt/126489-globaler-keylistener.html



ouch ... am ziel vorbei ...

KeyBindings funktionieren genau wie normale listener nur wenn die GUI SICHTBAR im vordergrund ist und FOCUS hat ...
und wenn man lesen könnte wüsste man das das bei TO nicht der fall ist denn :
1) KEINE GUI
2) im hintergrund > 3) kein FOCUS

nächste mal ERST LESEN , DANN DENKEN und DANN erst posten ...


----------



## faetzminator (13. Nov 2012)

Falscher Post erwischt, meinte http://www.java-forum.org/codeschnipsel-u-projekte/65318-globaler-java-key-logger-windows.html

PS: trööhööt, geh wieder in die Ecke flennen :joke:


----------



## trööhööt (13. Nov 2012)

faetzminator hat gesagt.:


> Falscher Post erwischt, meinte http://www.java-forum.org/codeschnipsel-u-projekte/65318-globaler-java-key-logger-windows.html
> 
> PS: trööhööt, geh wieder in die Ecke flennen :joke:



hmm .. nicht sonderlich super ...

grund : beigelegte DLL ist nur als x86 verfügbar und laut entwickler auch nur unter XP getestet ...
ist für heutige zeit nicht mehr angebracht ...
auch bin ich vom loader-code nicht überzeugt ... wenn man schon drauf hingewiesen wird das die dll im lib-path liegen muss ...
es gibt wunderbare beispiele wie sowas deutlich besser zu lösen ist ... man siehe JNA ... perfekter loader-code und hat für jede plattform die lib dabei ... und wurde auch unter diesen getestet ...

die von mir gelinkte lib ist sowohl x86 als auch x64 und für verschiedene plattformen geeignet ... dessweiteren auch unter mehreren plattformen getestet ...

nur mal so rein "objektiv" was meinen link von deinem unterscheidet


----------



## The_S (13. Nov 2012)

trööhööt hat gesagt.:


> hmm .. nicht sonderlich super ...
> 
> grund : beigelegte DLL ist nur als x86 verfügbar und laut entwickler auch nur unter XP getestet ...
> ist für heutige zeit nicht mehr angebracht ...
> ...



Recht hat er. Wollte das schon lange mal updaten, hab aber einfach keine Zeit, sorry :-(. Aber schön zu wissen, dass es da jetzt eine bessere Alternative gibt, kann ich mir das auch sparen .


----------



## _Gerret_ (13. Nov 2012)

KK

danke FerFemNemBem für die hilfe 
auch danke den anderen 

werd mir wohl was anderes überlegen müssen wie ich das überprüfe
mfg _Gerret_


----------

