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()
です。
public void closeAllConnections()
{
boolean shouldBackup = getBackupOnCloseStatus();
if(shouldBackup)
{
doBackUp();
}
dbManager.disconnectDB();
}
doBackup()
Netbeans Step-Debugger を使用した後、アプリケーションが終了する前に、プログラムの実行がメソッドに入っていないことに気付きました。変ですね。この動作を引き起こしている可能性のあるものに関して、何か助けていただければ幸いです。良い人たちに感謝します!
この追加情報が解決策を見つけるのに役立つかもしれませんが、私は Swing Application Framework を使用しているため、タスク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.");
}
}
}