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

发布于 2024-08-01 23:15:28 字数 146 浏览 8 评论 0原文

是否可以在应用程序级别而非组件级别收到关键事件的通知? 我所说的应用程序级别的意思不是让 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜扑 2024-08-08 23:15:28

信号不是一个通用的概念,但某些信号(例如用于关闭的 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.

爱格式化 2024-08-08 23:15:28

您可以使用 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);

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:

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);
云胡 2024-08-08 23:15:28

不确定在本机 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文