代码之家  ›  专栏  ›  技术社区  ›  Savvas Dalkitsis

Java应用层关键事件

  •  1
  • Savvas Dalkitsis  · 技术社区  · 16 年前

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

    例如,在没有图形用户界面的应用程序中,或者在需要对关键事件进行更全局的处理时,可以使用这种方法。

    3 回复  |  直到 16 年前
        1
  •  0
  •   PhiLho    16 年前

    不确定在本地Java中是否有可能:在Windows中,您必须创建DLL以在系统(全局)级别上钩住关键事件,我想它是UNIX或MACOS中的一种不同机制,因此您必须与低级别系统API进行接口才能完成这一任务。

        2
  •  2
  •   Aaron    16 年前

    可以使用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);
    
        3
  •  -1
  •   Paul Keeble    16 年前

    信号不是一个普遍的概念,但某些信号,如用于关机的ctrl+c,如果不在任何地方使用的话,就很普遍。这个特殊的信号可以通过一个关闭挂钩来收听。调用runtime.addshutdownbook(thread)将允许您知道何时出于任何原因关闭VM,并对该事件执行某些操作。

    推荐文章