2010-03-18 111 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