2010-03-18 2 views
16

Ich bin eine einfache Anwendung der Entwicklung des operativen Teil eines Unternehmens mit Swing zu verwalten, aber ich brauche, dass, wenn die Anwendung beendet, führt er dies:OnExit Event für eine Swing-Anwendung?

updateZonas(); 
db.close(); 

Aber wie kann ich das tun?

Antwort

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

Diese für jede Java-Anwendung funktioniert (Swing/AWT/Konsole)

+4

Das ist viel zu niedrig. – vemv

+1

@vemv warum ist es ** auch ** niedriges Niveau? Sicher, wenn Sie das Exit-Ereignis unter allen Umständen abfangen müssen, benötigen Sie einen Low-Level-Haken? – MTCoster

7

Fügen Sie einen WindowListener zu Ihrem JFrame hinzu. Seine windowClosing Methode würde aufrufen, was Code Sie brauchen, dann System.exit(0) (oder einen anderen Rückgabecode).

26

Verwenden Sie einen JFrame? wenn so können Sie dies versuchen:

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

Auch stellen eine try/catch/finally um die updateZonas und Dbclose Anrufe, falls etwas ist falsch. Sie können dem Benutzer mitteilen, dass etwas schief gelaufen ist und entscheiden, ob die App noch beendet werden soll oder nicht. –

+0

Ist 'System.exit (0);' notwendig? – Metatron

+0

Nein, es sollte nicht notwendig sein. – Brain