使用java.awt.Toolkit捕获全局键按下

时间:2012-03-27 02:33:40

标签: java windows keyboard operating-system awt

我在类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打印并且没有错误。偶数根本就不叫。

2 个答案:

答案 0 :(得分:1)

只是一个猜测,但你的样本中没有任何AWT窗口,所以我猜这就是为什么事件永远不会被解雇。

当你说“窗口是否有焦点”时,真正的应用程序是否有你已经砍掉的窗口,或者你在谈论java控制台窗口或类似的东西?

答案 1 :(得分:1)

我可能错了,因为我当然不是专家,但据我所知,你想要做的事情在Java中是不可能的。

您是否尝试使用Java程序捕获关键点击,但没有创建窗口? Java的安全性的一部分,这是我可能错的,它只能监听由特定Java程序创建的Java窗口内的事件。

因此,如果您尝试制作一些在后台运行并捕获按键的键盘记录器,则无法执行此操作。

我希望我能给你一个更具体的答案,但我希望这会有所帮助。