Java中应用程序级别的关键事件

时间:2009-08-16 13:54:35

标签: java events event-handling keyevent

是否可以在应用程序级别而不是在组件级别上通知关键事件?我的意思是应用程序级别没有swing组件接收键事件,而是让一个特殊的类听取系统范围的键事件。

这可以在没有GUI的应用程序中使用,或者在需要更全局地处理关键事件时使用。

3 个答案:

答案 0 :(得分:2)

您可以使用java.awt.Toolkit中的addAWTEventListener()方法向您的应用程序添加全局事件侦听器。

http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html#addAWTEventListener%28java.awt.event.AWTEventListener,%20long%29

当然,只有在您的应用程序具有焦点时,这才会起作用。

因此,您可以使用以下关键事件:

public class MyGlobalKeyListener implements AWTEventListener {
    public void eventDispatched(AWTEvent event) {
        // do something here
    }
}

// Then on startup register.
AWTEventListener myGlobalKeyListener = new MyGlobalKeyListener();

Toolkey.getDefaultToolkit().addAWTEventListener(myGlobalKeyListener, AWTEvent.KEY_EVENT_MASK);

答案 1 :(得分:0)

不确定它是否可能在本机Java中:在Windows中,你必须创建一个DLL来挂钩系统(全局)级别的关键事件,我想它是Unix或MacOS中不同的机制,所以你必须与低级系统API接口以完成此任务。

答案 2 :(得分:-1)

信号不是一个普遍的概念,但是如果不在任何地方使用,某些信号如ctrl + c用于关闭是很普遍的。可以使用关闭钩子来监听该特定信号。调用Runtime.addShutdownHook(Thread)将允许您知道VM何时因任何原因被关闭并对该事件执行某些操作。