2008-09-14 14 views
5

Tengo una aplicación Java que quiero apagar "muy bien" cuando el usuario selecciona Inicio-> Apagar. He intentado usar escuchas de apagado de JVM a través de Runtime.addShutdownHook (...) pero esto no funciona, ya que no puedo usar ningún elemento de IU.¿Cómo hago para que mi aplicación Java se cierre correctamente en Windows?

También intenté usar el controlador de salida en la ventana de la IU de la aplicación principal, pero no tengo forma de detener o detener el cierre por lo que puedo ver. ¿Cómo puedo manejar el cierre muy bien?

+0

¿Encontró una solución de trabajo? – Hoto

Respuesta

3

El enfoque de JNI mencionado anteriormente probablemente funcionará.

Puede usar JNA, que es básicamente una envoltura alrededor de JNI para que sea más fácil de usar. Una ventaja adicional es que (en mi opinión, al menos) generalmente es más rápido y más fácil de mantener que el JNI sin formato. Puede encontrar JNA en https://jna.dev.java.net/

Si acaba de iniciar la aplicación en el menú de inicio porque está tratando de hacer que se comporte como un servicio en Windows, puede usar el contenedor de servicios Java que se encuentra aquí: http://wrapper.tanukisoftware.org/doc/english/download.jsp

3

Por lo que sé, debe comenzar a utilizar JNI para configurar un controlador de mensajes para el mensaje de Windows WM_QUERYENDSESSION.

Para hacer esto (si es nuevo en la programación de Windows como yo) necesitará crear una nueva clase de ventana con una nueva función de manejo de mensajes (como se describe here) y manejar WM_QUERYENDSESSION desde el manejador de mensajes.

NB: Deberá usar JNIEnv :: GetJavaVM (...) y luego JavaVM :: AttachCurrentThread (...) en el hilo de gestión de mensajes antes de poder llamar a cualquier método Java desde su manejo de mensajes nativos código.

Cuestiones relacionadas