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

时间:2011-10-26 13:31:50

标签: java swing

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

  1. 向容器添加WindowListener并覆盖windowClosing事件
  2. 添加关闭挂钩(即Runtime.addShutdownHook
  3. 对于Java Desktop应用程序,哪种方法是“首选”方式?是否有“首选”方式?

1 个答案:

答案 0 :(得分:1)

不是最佳实践,不是首选方式,只关闭当前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)here是如何显示来自另一个新JVM实例

的错误消息的