1
我不太喜歡JFrame.EXIT_ON_CLOSE
選項。如果有一個線程正在寫入文件,或者正在下載某個選項,則該選項將在完成之前被殺死。相反,我試圖通過破壞GUI窗口正常終止的程序:如何避免JFrame.EXIT_ON_CLOSE並優雅地終止揮杆計劃
/**
* Terminates the whole program while saving settings.
*/
public void Terminate() {
//gui is JFrame representing the application window
gui.setVisible(false);
gui.dispose();
gui.destroyTray();
//Stop tool thread if running
if(ToolRunning())
StopTool();
//Save settings
if(settings==null) {
System.out.println("Settings is null!");
return;
}
try {
settings.loadSettingsFromBoundFields();
settings.saveToFile(SETTINGS_FILE, false);
}
catch(IOException e) {
System.err.println("Problem saving settings:");
e.printStackTrace(System.err);
}
//Here, no non-deamon threads should be running (daemon thread does not prolong the applicatione execution).
}
但程序繼續運行,當我dispose()
的JFrame
了Swing線程不會退出。還有什麼可以阻止Swing?當我使用相同的方法制作更簡單的程序時(隱藏窗口和dispose()
)它工作。這意味着我的項目的複雜性隱藏了泄漏的東西。我怎樣才能找到什麼阻止來自終止的Swing線程?
調用setVisible(假)==處置()如果JVM仍然活着 – mKorbel
嘗試的WindowListener /國家/ E.I。 – mKorbel
1.(沒有... meta多次)。我們不是幫助臺,2.(爲了避免錯誤的答案)有兩種類型的進程需要敲定/關閉()deamon和non_deamon線程,3.我如何找到什麼阻止Swing線程終止? - JProfiler在運行時向你展示所有不是finalize/close()的混亂,包括。 class/void /變量名稱/繼承或它們的嵌套API對象 – mKorbel