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

  • Themenstarter Themenstarter _Gerret_
  • Beginndatum Beginndatum
G

_Gerret_

Gast
Hi!

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

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

Wäre schön wenn mir das jemand, simple erklären könnte. 🙂
 
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.
 
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.

Java:
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 😉)?
 
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.
 
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.
 
Zuletzt bearbeitet:
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
 
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.
 
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
 
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
 
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

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 🙂.
 
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_
 

Zurück
Oben