我遇到一种情况,当用户向操作系统(在我的情况下只有 Windows)发出关闭信号时,我想执行某些任务。
我尝试过使用java shutdown hooks。我面临的问题是,当我使用退出程序时System.exit(0);
,关闭挂钩被调用,但当我直接关闭计算机时,它们没有被调用。
这是我用于关闭挂钩的代码-
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
}
}
有什么方法可以与操作系统交互(我假设有一些本机代码),以便它允许我的程序正常退出?
任何帮助将不胜感激。
ShutdownHooks
确实不能通过关闭 Windows 来工作。我认为这是 Java 的一个 bug,并于上周打开了一个 BugReport。但它尚未发布。
2008 年有一个旧的 Bug 报告:当用户注销时,Runtime#addShutdownHook 在 Windows Vista 上不起作用。 Windows 7 也会出现同样的问题。该票证已被 java.com 关闭,但没有得到令人满意的响应。
Windows 通过关闭给予应用程序一些时间来正常终止。延迟由注册表项定义WaitToKillApplication
。我希望java程序使用这个延迟来执行钩子(并且如果Runtime.runFinalizersOnExit()
已设置)。
让我们看看 Oracle 是否将其识别为错误......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)