Ich benutze JNativeHook in meinem Programm, um globale Tastenanschläge außerhalb meines Programms zu erkennen. Diese ist, was ich brauche zu erreichen:Halte einen physischen Schlüssel und benutze dann awt.Robot, um automatisch dieselbe Taste in Java zu drücken.
wenn ich versuche, körperlich zu betätigen und halten die Leertaste, und bevor ich physisch die Leertaste loslassen: Ich möchte den Raum, um die awt.Robot Klasse Auto nutzen, drücken Bar für mich in einer Schleife, während die Leertaste gedrückt wird.
auf das Problem Meine Theorie ist, dass die JNativeHook NativeKeyListener die awt.Robot keyRelease() Funktion versteht, als ob es sich um eine physischen Schlüsselhilfsentriegelung (in diesem Fall die Leertaste.)
Hier ist der relevante war Code:
// These are the global variables
// ...
Robot robot; // Initialized in the constructor
// ...
boolean spaceDown = false;
boolean activeThread = false;
private void pressSpace(){
robot.keyPress(KeyEvent.VK_SPACE);
robot.delay(20);
robot.keyRelease(KeyEvent.VK_SPACE);
robot.delay(30);
System.out.println("Robot - Press/Release");
}
private void executeThread(){
new Thread(){
public void run(){
while(spaceDown){
pressSpace();
}
activeThread = false;
}
}.start();
}
public void nativeKeyPressed(NativeKeyEvent e){
if(e.getKeyCode() == NativeKeyEvent.VC_SPACE){
System.out.println("Physical - Pressed");
activeThread = true;
spaceDown = true;
if(activeThread){
executeThread();
}
}
}
public void nativeKeyReleased(NativeKeyEvent e){
if(e.getKeyCode() == NativeKeyEvent.VC_SPACE){
System.out.println("Physical - Released");
spaceDown = false;
}
}
Nach dem Ausführen dieses Programms, wenn ich die Leertaste drücken und dann OR freigeben, wenn ich es halten. Ich bekomme die gleiche Ausgabe jedes Mal in der Konsole. Es sieht im Allgemeinen so aus ...
...
Physical - Pressed
Physical - Released
Robot - Press/Release
Physical - Pressed
Physical - Released
Robot - Press/Release
...
Irgendwelche Ideen?
Der Ausgang geht auf eine nie endende Schleife BTW. –