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()
перед выходом из приложения. Это странно. Я был бы очень признателен за любую помощь в отношении того, что может вызвать такое поведение. Спасибо хорошим людям!
Только если эта часть дополнительной информации может быть полезным в поиске решения, я использую Framework приложений 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 по умолчанию в любом месте? –
Я бы сказал, потому что вы вызываете 'System.exit (0)' до того, как 'DoBackUpTask' может выполняться (при условии, что это не-демонный поток) – MadProgrammer
@HovercraftFullOfEels я явно не задал операцию закрытия по умолчанию ... Но я подозреваю, что GUI-Builder Netbeans может вызывать System.exit (0), когда mainFrame приложения («FrameView» в случае SAF) закрывается с помощью кнопки «X». – CodeBurner