我在类Toolkit中找到了addAWTKeyListener方法,但无论窗口是否具有焦点,我都无法正常工作。我的代码如下:
import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;
public class KeyTest {
public static void main(String[] args){
Thread t = new Thread(){
@Override
public void run() {
System.out.println("STARTING");
Toolkit kit = Toolkit.getDefaultToolkit();
kit.addAWTEventListener(new AWTEventListener(){
@Override
public void eventDispatched(AWTEvent event) {
System.out.println("EVENT");
if(event instanceof KeyEvent){
KeyEvent kEvent = (KeyEvent) event;
System.out.println(kEvent.getKeyCode());
}
}
}, AWTEvent.KEY_EVENT_MASK);
while(true);
}
};
t.start();
}
}
我有什么问题吗?我发现STARTING打印并且没有错误。偶数根本就不叫。
答案 0 :(得分:1)
只是一个猜测,但你的样本中没有任何AWT窗口,所以我猜这就是为什么事件永远不会被解雇。
当你说“窗口是否有焦点”时,真正的应用程序是否有你已经砍掉的窗口,或者你在谈论java控制台窗口或类似的东西?
答案 1 :(得分:1)
我可能错了,因为我当然不是专家,但据我所知,你想要做的事情在Java中是不可能的。
您是否尝试使用Java程序捕获关键点击,但没有创建窗口? Java的安全性的一部分,这是我可能错的,它只能监听由特定Java程序创建的Java窗口内的事件。
因此,如果您尝试制作一些在后台运行并捕获按键的键盘记录器,则无法执行此操作。
我希望我能给你一个更具体的答案,但我希望这会有所帮助。