Java 如何在关闭时避免JFrame.EXIT_并优雅地终止swing程序
我不太喜欢Java 如何在关闭时避免JFrame.EXIT_并优雅地终止swing程序,java,multithreading,swing,Java,Multithreading,Swing,我不太喜欢JFrame.EXIT\u ON\u CLOSE选项。如果有一个线程正在写入文件,或者正在下载某个内容,那么该选项将在完成之前被终止。相反,我试图通过破坏GUI窗口来优雅地终止程序: /** * Terminates the whole program while saving settings. */ public void Terminate() { //gui is JFrame representing the application wi
JFrame.EXIT\u ON\u CLOSE
选项。如果有一个线程正在写入文件,或者正在下载某个内容,那么该选项将在完成之前被终止。相反,我试图通过破坏GUI窗口来优雅地终止程序:
/**
* 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).
}
但是当I
dispose()
JFrame。还有什么能阻挡秋千?当我使用相同的方法(隐藏窗口和dispose()
)制作一个更简单的程序时,它工作了。这意味着我的项目的复杂性隐藏了一些泄露的信息。如何找到阻止Swing线程终止的原因?您是否尝试过此方法,即Frame.getFramessetVisible(false)==dispose(),如果JVM仍然有效,请尝试WindowListener/State/e.I.1。(多次没有…meta。)我们不是服务台,2。(为了避免这里的错误答案)有两种进程需要finalize/close()deamon和non_deamon线程,3。如何找到阻止Swing线程终止的原因JProfiler向您展示了在运行时没有完成/close()的所有混乱,包括类/void/variable name/heritation或它们的嵌套APIobject@mKorbel我不懂你的1.
,多学点单词和语法。您的评论的其余部分显示对问题的理解很差-我不是在寻找线程-我知道这些是AWT线程。我想知道是什么让它们运行。我不是在寻找线程
-使用JProfiler,你可以在那里查看你的线程,如果你真的想知道是什么让它们运行
,我之所以关闭这个线程的原因有三个,其中一个太广泛了,因为没有人知道问题出在哪里(我敢打赌问题在于禁止或更换笔记本电脑)