Windows关闭时的Java关闭 Hook 调用

标签 java windows native shutdown-hook

我有这样一种情况,当用户向操作系统(在我的例子中只有 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/

相关文章:

Java排序算法题

java - 使用正则表达式查找斐波那契数列

java - ASM ByteCode - 重写visitLine()方法

c++ - DLL 中的静态数据

database - 什么数据库使用 phonegap 存储?

java - 如何通过Graphql schema生成java实体

python - 有人成功地使用 Pyinstaller 将数据文件捆绑到一个文件中吗?

windows - 如何使用 TortoiseGit 检查当前 git 存储库的 URL?

c++ - 如何使用 Gradle DSL(领域特定语言)上的文档?

android - 在 android native 中,Mediacodec.dequeueInputBuffer 不返回