2010-03-18 15 views
16

Estoy desarrollando una aplicación sencilla de gestionar la parte operativa de un negocio usando Swing, pero necesito que cuando se cierra la aplicación, realiza lo siguiente:Evento OnExit para una aplicación Swing?

updateZonas(); 
db.close(); 

Pero, ¿cómo puedo hacer esto?

Respuesta

33
Runtime.getRuntime().addShutdownHook(new Thread() 
{ 
    @Override 
    public void run() 
    { 
     updateZonas(); 
     db.close(); 
    } 
}); 

Esto funciona para cualquier aplicación Java (Swing/AWT/Consola)

+4

Esto es demasiado bajo nivel. – vemv

+1

@vemv ¿por qué es ** demasiado ** bajo nivel? Sin duda, si necesita interceptar el evento de salida en cualquier condición, ¿necesita un gancho de nivel bajo? – MTCoster

7

Agregue WindowListener a su JFrame. Su método windowClosing llamaría al código que necesita, luego System.exit(0) (o algún otro código de retorno).

26

¿Estás utilizando un JFrame? Si es así usted puede intentar esto:

myframe.addWindowListener(new java.awt.event.WindowAdapter() { 
     public void windowClosing(WindowEvent winEvt) { 
      updateZonas(); 
      db.close(); 
      System.exit(0); 
     } 
    }); 
+4

también poner un try/catch/finally en torno a las llamadas updateZonas y dbclose en caso de que algo Está Mal. Puede informarle al usuario que algo salió mal y decidir si la aplicación aún debe salir. –

+0

¿Es necesario el 'System.exit (0);'? – Metatron

+0

No, no debería ser necesario. – Brain

Cuestiones relacionadas