2010-03-18 26 views
16

我開發一個簡單的應用程序來管理使用Swing的一個企業的運作的一部分,但我需要一個應用程序退出時,它會執行此:OnExit事件對於Swing應用程序?

updateZonas(); 
db.close(); 

但我怎麼能這樣做呢?

回答

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

這適用於任何Java應用程序(鞦韆/ AWT /控制檯)

+4

這太低級了。 – vemv 2012-11-28 18:39:18

+1

@vemv爲什麼它太**低級別?當然,如果你需要在任何情況下攔截退出事件,你需要一個低級別的鉤子? – MTCoster 2013-06-11 18:32:35

7

將一個WindowListener添加到您的JFrame。它的windowClosing方法會調用你需要的任何代碼,然後System.exit(0)(或其他一些返回碼)。

26

您使用的是JFrame嗎?如果是的話,你可以試試這個:

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

也把一個try/catch /終於周圍的情況下,東西updateZonas和dbclose電話是錯的。你可以讓用戶知道出了什麼問題,並決定應用程序是否應該退出。 – 2010-03-18 01:56:31

+0

'System.exit(0);'是否必要? – Metatron 2016-07-23 11:19:27

+0

不,不應該有必要。 – Brain 2017-01-19 09:44:24