mainFrame().addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent evt)
{
retrieveItems();
closeAllConnections();
System.exit(0);
}
});
對於上面的代碼,retrieveItems()
很好的執行,但有一個後臺任務叫doBackup()
這裏面closeAllConnections()
而無法執行的。該計劃似乎跳過了這項任務。以下是closeAllConnections()
包含的簡要說明;爲什麼WindowClosing處理程序在退出程序之前不執行後臺任務?
public void closeAllConnections()
{
boolean shouldBackup = getBackupOnCloseStatus();
if(shouldBackup)
{
doBackUp();
}
dbManager.disconnectDB();
}
使用NetBeans步調試後,我注意到,在程序執行不前,甚至應用程序退出進入doBackup()
方法。這很奇怪。我非常感謝有關可能導致此行爲的任何幫助。感謝好人!
只是如果這一塊額外的信息可能是在尋找一個解決方案的幫助,我使用Swing應用程序框架,所以任務doBackup()
看起來如下...
@Action
public Task doBackUp()
{
return new DoBackUpTask(getApplication());
}
private class DoBackUpTask extends org.jdesktop.application.Task<Object, Void>
{
private boolean done = false;
DoBackUpTask(org.jdesktop.application.Application app)
{
super(app);
this.setMessage("Backing-up database...");
}
@Override
protected Object doInBackground()
{
File destDir = new File(appManager.getBackUpDir());
done = backUpDataBase(destDir);
return null;
}
@Override
protected void succeeded(Object result)
{
if(done)
{
setMessage("BackUp completed.");
}
}
}
你在任何地方設置Jframe的默認關閉操作? – 2013-03-20 03:43:10
我想說的是,因爲你調用'System.exit(0)'可以執行'DoBackUpTask'前(假設它是一個非守護線程) – MadProgrammer 2013-03-20 03:47:27
@HovercraftFullOfEels我didin't明確設置默認的關閉操作。但我懷疑Netbeans GUI-Builder可能會在應用程序的mainFrame(在SAF情況下爲'FrameView')使用'X'按鈕關閉時調用System.exit(0)。 – CodeBurner 2013-03-20 04:12:54