是否可以在应用程序级别而不是在组件级别上通知关键事件?我的意思是应用程序级别没有swing组件接收键事件,而是让一个特殊的类听取系统范围的键事件。
这可以在没有GUI的应用程序中使用,或者在需要更全局地处理关键事件时使用。
答案 0 :(得分:2)
您可以使用java.awt.Toolkit中的addAWTEventListener()方法向您的应用程序添加全局事件侦听器。
当然,只有在您的应用程序具有焦点时,这才会起作用。
因此,您可以使用以下关键事件:
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何时因任何原因被关闭并对该事件执行某些操作。