2013-03-21 2 views
4

Это мой основной метод, и он содержит shutdownhook:Почему этот shutdownhook не работает?

public static void main(String args[]) { 
    Runtime.getRuntime().addShutdownHook(new Thread() { 
     @Override 
     public void run() { 
      JOptionPane.showMessageDialog(null, "Shutdown hook"); 
     } 
     }); 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(
      new Runnable() { 
       @Override 
       public void run() { 
        Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler()); 
        MyFrame frame = new MyFrame(); 
        frame.setVisible(true); 
       } 
      }); 
} 

Проблема является JOptionPane не появляется вообще. Вместо этого кадр закрывается, но само приложение все еще работает. PS. Я не могу использовать событие WindowClosing, потому что он не срабатывает на Cmd + Q команда на Mac OS X.

+0

Возможно, это связано с тем, что диспетчер событий awt уже был выключен, когда выполняются крючки остановки? – SpaceTrucker

+0

@SpaceTrucker любые предложения? – Igor

+0

Определенно не используйте выключение крюка. Найдите другой механизм. –

ответ

1

Отправляемая нить уже отключена или, скорее всего, будет отключена до того, как будет отправлена ​​ваша очередь в очередь.

Вам нужно найти другой способ улавливания событий выхода, вы можете отключить крюк, чтобы вы могли убирать, когда VM выходит, поэтому вы действительно не хотите, связывая больше ресурсов в пользовательском интерфейсе, когда это называется.

Смежные вопросы