在System.exit(0)上没有执行ShutdownHook代码

时间:2016-03-19 09:02:56

标签: java multithreading shutdown-hook

我有关闭挂钩,我附加到运行时

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);关闭我的应用程序,这一切都安然无恙吗?

1 个答案:

答案 0 :(得分:0)

好吧我发现一个问题我有多个ShutDownHooks挂钩因为某些原因这个没有执行,我删除了所有旁边一个现在一切正常。可能太多的负载。

完美无瑕地工作,如果你使用netbeans也不要使用RED TERMINATION BUTTON, - 只是一个注释。这样你永远不会执行SDH。