1

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

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

4

3 回答 3

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);
于 2009-08-16T19:04:27.917 回答
0

不确定在本机 Java 中是否可行:在 Windows 中,您必须创建一个 DLL 来挂钩系统(全局)级别的关键事件,我想这是 Unix 或 MacOS 中的不同机制,因此您必须与低级接口级系统 API 来完成这项工作。

于 2009-08-16T17:32:01.163 回答
-1

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

于 2009-08-16T16:28:07.887 回答