Java 应用程序级别的关键事件
是否可以在应用程序级别而非组件级别收到关键事件的通知? 我所说的应用程序级别的意思不是让 Swing 组件接收关键事件,而是让一个特殊的类侦听系统范围的关键事件。
例如,这可以在没有 GUI 的应用程序中使用,或者在需要对关键事件进行更全局的处理时使用。
Is it possible to be notified of key events on an application level and not on a Component level? What i mean by application level is not having a swing component receive key events but to have a special class listen to system wide key events.
This could be used in an app with no GUI for instance or when a more global handling of key events is needed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
信号不是一个通用的概念,但某些信号(例如用于关闭的 ctrl+c)即使不是到处使用,也是很普遍的。 可以使用关闭挂钩来监听该特定信号。 调用 Runtime.addShutdownHook(Thread) 将允许您知道虚拟机何时因任何原因关闭,并对该事件执行某些操作。
Signals are not a universal concept, but certain signals like ctrl+c for shutdown are widespread if not used everywhere. That particular signal can be listened to using a shutdown hook. Calling Runtime.addShutdownHook(Thread) will allow you to know when the VM is being closed for whatever reason and do something on that event.
您可以使用 java.awt.Toolkit 中的 addAWTEventListener() 方法向应用程序添加全局事件侦听器。
http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html#addAWTEventListener%28java.awt.event.AWTEventListener,%20long%29
当然这个仅当您的应用程序具有焦点时才有效。
因此,对于关键事件,您可以使用:
You can add a global event listener to you application using the addAWTEventListener() method in java.awt.Toolkit.
http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html#addAWTEventListener%28java.awt.event.AWTEventListener,%20long%29
Of course this will only work when your application has focus.
So for key events you could use:
不确定在本机 Java 中是否可行:在 Windows 中,您必须创建一个 DLL 来挂钩系统(全局)级别的关键事件,我认为这是 Unix 或 MacOS 中的不同机制,因此您必须与低层接口级别系统 API 来完成此任务。
Not sure if it is possible in native Java: in Windows, you have to create a DLL to hook key events at the system (global) level, I suppose it is a different mechanism in Unix or MacOS, so you have to interface to low level system API to get this done.