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.getFrames

setVisible(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,你可以在那里查看你的线程,
如果你真的想知道是什么让它们运行
,我之所以关闭这个线程的原因有三个,其中一个太广泛了,因为没有人知道问题出在哪里(我敢打赌问题在于禁止或更换笔记本电脑)