System.exit(0) 上未执行 ShutdownHook 代码

ShutdownHook code not being executed on System.exit(0)

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

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

这是一个 shutDownHook Class

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();
            }
        });

应用程序关闭 bud hook 执行没有通过,知道为什么吗?

我知道有些情况下 ShutdownHook 不执行 bud im 关闭我的应用程序 System.exit(0); 应该是安全的吗?

好的,我发现了一个问题,我有多个 ShutDownHooks 挂钩,由于某种原因这个没有执行,我删除了一个,现在一切正常 ok.Maybe 负载太大。

工作完美,如果您使用 netbeans,请不要使用红色终止按钮,- 只是一种 note.That 永远不会执行 SDH 的方式。