Java:在Windows和Linux上处理注销或关机

问题描述:

有没有办法让Java GUI应用程序响应系统关闭或注销事件,而不是使用JNI? (在Windows上,JNI会在Linux上使用WM_QUERYENDSESSION)Java:在Windows和Linux上处理注销或关机

该方法应该允许程序提示用户保存等,然后继续注销过程。

据我所知,Java无法捕获系统关闭或注销事件。

但是,当JVM终止于adding a shutdown hook时,您可以捕获。

AWT的WindowAdapter也有一个windowClosing事件,您可以覆盖并挂钩到要监视的窗口。 Swing继承了这个;我相信SWT也是如此。请注意,如果您覆盖此事件,您必须手动处理该窗口!

我相信MS Windows会在它关闭时触发这些事件。我相信Linux/UNIX上的SIGTERM也是如此,尽管如果在关机期间Linux会在SIG后面加一个SIGKILL应用。

+0

当心,AWT的WindowAdapter的只挂钩到窗口上的事件。如果使用关闭终止环境,则windowClosing或windowClosed事件不会触发! – parasietje 2012-02-14 18:02:20

这并不回答问题,但解决了它的一部分。

在Unix GUI会话中,我认为处理注销事件的正确方法是将文档保存到临时文件并将信息保存在会话状态中。在会话恢复过程中,程序可以重新加载临时文件并占用它停止的地方。不需要询问用户是否保存。

我只希望更多的软件做透明会话保存和恢复。太多的程序用空的文档窗口重新打开,因为所使用的GUI框架做了太多的工作,但其余的工作都没有完成以实际处理任何有意义的程序状态。

我认为Runtime.getRuntime()。addShutdownHook应该提供您需要的功能。