2010-03-18 4 views
16

Sto sviluppando una semplice applicazione per gestire la parte operativa di un business utilizzando Swing, ma ho bisogno che alla chiusura dell'applicazione, si svolge in questo modo:Evento OnExit per un'applicazione Swing?

updateZonas(); 
db.close(); 

Ma come posso fare questo?

risposta

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

Questo funziona per qualsiasi applicazione Java (Swing/AWT/Console)

+4

Questo è troppo di basso livello. – vemv

+1

@vemv perché è ** troppo ** basso livello? Sicuramente se hai bisogno di intercettare l'evento di uscita in qualsiasi condizione hai bisogno di un hook di basso livello? – MTCoster

7

Aggiungi un WindowListener al tuo JFrame. Il suo metodo windowClosing chiamerebbe qualsiasi codice necessario, quindi System.exit(0) (o qualche altro codice di ritorno).

26

Stai utilizzando un JFrame? se così si può provare questo:

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

anche mettere un try/catch/finally intorno alle chiamate updateZonas e dbclose in caso qualcosa è sbagliato. Puoi far sapere all'utente se qualcosa è andato storto e decidere se l'app deve ancora uscire. –

+0

'System.exit (0);' necessario? – Metatron

+0

No, non dovrebbe essere necessario. – Brain