如何避免JFrame.EXIT_ON_CLOSE并优雅地终止swing程序

时间:2015-05-07 08:15:21

标签: java multithreading swing

我不太喜欢JFrame.EXIT_ON_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).
   }

但是当我dispose() JFrame时,程序继续运行并且Swing线程不会退出。还有什么可以阻止Swing?当我使用相同的方法(隐藏窗口和dispose())创建一个更简单的程序时,它工作。这意味着我的项目的复杂性隐藏了泄露的东西。如何找到阻止Swing线程终止的内容?

1 个答案:

答案 0 :(得分:1)