2011-11-21 40 views
6

Probé un windowClosing, funciona, cuando presiono el botón de cerrar, pero cuando uso Cmd+Q para cerrar, no se está llamando al windowClosing, ¿cómo puedo solucionarlo? ¿Debo detectar Cmd+Q en mac, Alt + F4 en Windows a través de la escucha de teclas? ¿Es un oyente general para cerrar la ventana, lo que sea mediante el botón de cerrar o el teclado, o el evento Ctrl+Alt+Delete o Cmd+Option+Esc para centrarse matar? Gracias.¿Cómo detectar que JFrame está cerrado?

+2

http://stackoverflow.com/questions/2061194/swing-on-osx-how -to-trap-command-q – dacwe

+0

http://www.leepoint.net/notes-java/GUI/containers/10windows/12frameclose.html –

+0

@TedWong ¿Encontró una solución a su problema? Por favor, publique su propia respuesta si lo hizo. – Igor

Respuesta

1

Parece que necesita agregar algunos KeyListeners y una fábrica para detectar el que desea para un sistema operativo en particular.

Check Out

2

no estoy seguro de cuál es la situación en los Macs, pero en Windows que presentamos lo mejor de devolución de llamada windowClosing() del botón de cierre; Alt-F4; y si cierra la aplicación a través del administrador de tareas. No obtendrá la devolución de llamada si usa el administrador de tareas para matar el proceso, pero no lo esperaría de todos modos.

Ha recordado llamar al setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); en su instancia de JFrame, ¿verdad?

1

Se puede usar esta biblioteca OSX: com.apple.eawt.ApplicationListener

handleQuit(ApplicationEvent event) 

probablemente hará el truco.

información de los documentos:

llama cuando la aplicación se envía el evento Quit. Este evento se genera cuando el usuario selecciona Salir del menú de la aplicación, cuando el usuario escribe Command-Q, o cuando el control de usuario hace clic en el ícono de su aplicación en el Dock y elige Salir. Puede aceptar o rechazar la solicitud para abandonar.

Por supuesto, esta solución no funcionará en Windows. Por lo que yo sé, no hay una solución universal, por lo que esta es probablemente la mejor manera de hacerlo.

2

hay un método más windowClosed() intente reemplazar método cosa. Espero que funcione para usted.

+0

+1 ejemplo http://stackoverflow.com/questions/7613577/java-how-do-i-prevent-windowclosing-from-actually-closing-the-window/7613768#7613768 – mKorbel

+0

adivinanzas al azar? – kleopatra

+0

@kleopatra Tengo tres publicaciones muy simlair, sí, tienes razón, al azar ... – mKorbel

0

Como dijiste, se llama a WindowsClusing cuando haces clic en el botón (x). También estoy en un Mac y la forma en que sale el CMD + Q para enviar una señal a la aplicación está utilizando Runtime.addShutDownHook

Runtime.getRuntime().addShutdownHook(new Thread() { 
    @Override 
    public void run() { 
     // code to run when CMD+Q is pressed 
    } 
} 
Cuestiones relacionadas