Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保在关闭Java桌面应用程序时执行任务?_Java_Swing - Fatal编程技术网

如何确保在关闭Java桌面应用程序时执行任务?

如何确保在关闭Java桌面应用程序时执行任务?,java,swing,Java,Swing,这是一个“最佳实践”类型的问题。AFAIK当需要在JVM关闭之前执行任务时,有两种方法(可能更多): 将WindowListener添加到容器中,并覆盖windowClosing事件 添加关机挂钩(即) 对于Java桌面应用程序,哪种方法是“首选”方法?有“首选”方式吗?不是最佳实践,不是首选方式,只是关闭当前JVM实例,非常简单 1) Top-LevelContainer#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) 2) 添加Win

这是一个“最佳实践”类型的问题。AFAIK当需要在JVM关闭之前执行任务时,有两种方法(可能更多):

  • WindowListener
    添加到容器中,并覆盖
    windowClosing
    事件
  • 添加关机挂钩(即)

  • 对于Java桌面应用程序,哪种方法是“首选”方法?有“首选”方式吗?

    不是最佳实践,不是首选方式,只是关闭当前JVM实例,非常简单

    1)
    Top-LevelContainer#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)

    2) 添加
    WindowListener

         WindowListener exitListener = new WindowAdapter() {
    
            @Override
            public void windowClosing(WindowEvent e) {
                int confirm = JOptionPane.showOptionDialog(null, 
                      "Are You Sure to Close Application?", "Exit Confirmation", 
                      JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
                      null, null, null);
                if (confirm == JOptionPane.YES_OPTION) {
                    Top-LevelContainer#setVisible(false);
                    // clean-up everything 
    
                    // on error display  JOptionPane with error mgs but from
                    // another JVM instance, e.g.jar file, see add 3.)
                    System.exit(1); //in some cases not works System.exit(0);
                }
         }
    

    3) 下面是关于如何显示来自另一个新JVM实例的错误消息的剩余部分

    我的问题您真正想知道什么,+1对于非常奇怪的问题不要使用幻数!0表示是还是不是?@camickr纠正了我的一个错误习惯