Код ShutdownHook не выполняется в System.exit(0)

У меня есть хук Shutdown, который я подключаю к среде выполнения.

Runtime.getRuntime().addShutdownHook(new ShutDownHook(false));

Вот класс ShutDownHook

public class ShutDownHook extends Thread {

    private final boolean interupt;

    public ShutDownHook(boolean interupt) {
        this.interupt = interupt;
    }

    @Override
    public void run() {

        if (interupt) {
            return;
        }
        System.out.println("ShutdownHook Execution");
        DbUtil.insertIntoDailyStats(MainDataModel.downloadedBytesSessionProperty().getValue());
        MainDataModel.getInstance().loginProfile.getPreferences().putLong(
                Info.PreferenceData.PREF_USER_DAILY_STAT_DOWNBYTE, MainDataModel.downloadedBytesTodayProperty().get());

         System.out.println("ShutdownHook Execution finished");

    }

}

И я закрываю свое приложение из значка на панели задач с помощью метода

 exit.addActionListener((ActionEvent e) -> {
            try {
                GlobalScreen.unregisterNativeHook();
                System.exit(0);
            } catch (NativeHookException ex) {
                ex.printStackTrace();
            }
        });

Выполнение хука запуска приложения закрывается, есть идеи, почему?

Я знаю, что бывают случаи, когда ShutdownHook не выполняется, если я закрываю свое приложение с помощью System.exit(0);, что должно быть в целости и сохранности?


person Tomas Bisciak    schedule 19.03.2016    source источник


Ответы (1)


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

Работает безупречно, даже если вы используете netbeans, не используйте КРАСНУЮ КНОПКУ ЗАВЕРШЕНИЯ, - просто примечание. Таким образом, вы никогда не получите выполнение SDH.

person Tomas Bisciak    schedule 21.03.2016