values que operating name componentes java swing operating-system

java - que - ¿Cómo detectar el JFrame está cerrado?



java system os name (5)

addWindowListener un addWindowListener e implementé el windowClosing , funciona, cuando windowClosing el botón de cerrar, pero cuando uso Cmd+Q para cerrar, el windowClosing no se está llamando, ¿cómo puedo solucionarlo? ¿Debo detectar Cmd+Q en mac, Alt + F4 en Windows a través de la escucha de clave? ¿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 enfocar matar? Gracias.


No estoy seguro de cuál es la situación en los Mac, pero en Windows obtienes la devolución de llamada WindowClosing () desde el botón de cerrar; 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 a setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); en tu instancia de JFrame, ¿no?


Puede usar esta biblioteca osx : com.apple.eawt.ApplicationListener

handleQuit(ApplicationEvent event)

Probablemente haga el truco.

Información de los documentos:

Se llama cuando la aplicación se envía al evento Salir. 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.


hay un método más windowClosed () intenta anulando el método thing. Espero que funcione para usted.


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

Revisa


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

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