私のプログラムでJNativeHookを使用して、自分のプログラム以外のグローバルキーストロークを検出しています。 これは私が達成するために必要なものです:物理キーを保持し、awt.Robotを使用してJavaの同じキーを自動的に押す
を、私は物理的に押すとにスペースバーを保持し、私は物理的にスペースバーをリリースする前にしようとすると:私は、自動プレスにスペースをawt.Robotクラスを使用したいですスペースバーが物理的に押されている間、ループの中で私のためのバー。
問題への私の理論は、それが物理キーリリース(この場合は、スペースバー。)
ここでは関連性があるかのようJNativeHook NativeKeyListenerがawt.Robot keyRelease()関数を理解するということですコード:私は、スペースキーを押すと、私はそれを保持している場合、その後ORを離すと、このプログラムを実行した後
// 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;
}
}
。コンソールで毎回同じ出力が得られます。一般的にこのように見えます...
...
Physical - Pressed
Physical - Released
Robot - Press/Release
Physical - Pressed
Physical - Released
Robot - Press/Release
...
アイデアはありますか?
出力は終わりのないループBTWになります。 –