我有这样一种情况,当用户向操作系统(在我的例子中只有 Windows)发出关闭信号时,我想执行一些任务。
我尝试过使用 java 关闭 Hook 。我面临的问题是,当我使用 System.exit(0);
退出程序时,会调用关闭 Hook ,但当我直接关闭计算机时,它们不会。
这是我用于关闭 Hook 的代码-
Runtime.getRuntime().addShutdownHook(new JVMShutdownHook()); //in main method
//within the main java class
private static class JVMShutdownHook extends Thread {
@Override
public void run() {
//perform tasks
}
}
有什么方法可以与操作系统交互(我假设是一些 native 代码),以便它允许我的程序正常退出?
如有任何帮助,我们将不胜感激。
最佳答案
ShutdownHooks
确实不能通过关闭 Windows 来工作。我认为它是 Java 的一个错误,上周打开了一个错误报告。然而,它尚未(尚未)发布。
2008 年有一个旧错误报告:Runtime#addShutdownHook does not work on Windows Vista, when user logs out . Windows 7 也会出现同样的问题。java.com 没有得到令人满意的响应就关闭了票证。
Windows 通过关机为应用程序提供一些时间以正常终止。延迟由注册表项 WaitToKillApplication
定义。我希望 java 程序使用此延迟来执行 Hook (如果设置了 Runtime.runFinalizersOnExit()
,则完成)。
让我们看看 Oracle 是否将其识别为错误...
关于Windows关闭时的Java关闭 Hook 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29179684/