Pregunta

¿Es posible ser notificado de los eventos clave en un nivel de aplicación y no en un nivel de componentes? Lo que quiero decir con nivel de aplicación es no tener un componente de oscilación recibir eventos clave, pero para tener una clase especial escuchan en todo el sistema eventos clave.

Esto podría ser utilizado en una aplicación sin interfaz gráfica de usuario, por ejemplo, o cuando se necesita un manejo más global de los acontecimientos clave.

¿Fue útil?

Solución

No estoy seguro si es posible en Java nativa: en Windows, usted tiene que crear un archivo DLL para conectar los eventos clave en el sistema de nivel (global), supongo que es un mecanismo diferente en Unix o MacOS, así que hay que interfaz con el API de bajo nivel del sistema para hacer esto.

Otros consejos

Puede añadir un detector de eventos global para que la aplicación utilizando el método addAWTEventListener () en java.awt.Toolkit.

http://java.sun.com/javase/6/docs/api/java/awt/Toolkit.html#addAWTEventListener%28java.awt.event.AWTEventListener,%20long%29

Por supuesto, esto sólo funcionará cuando la aplicación tiene el foco.

Así que para los eventos clave que podría utilizar:

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);

Las señales no son un concepto universal, pero ciertas señales como Ctrl + C para el cierre son generalizadas si no se utiliza en todas partes. Esa señal en particular puede escucharse a través de un gancho de cierre. Llamando Runtime.addShutdownHook (Tema) le permitirá saber cuando la máquina virtual está siendo cerrada por cualquier razón y hacer algo en ese evento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top