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

5

除了使用JNI,Java GUI应用程序还有没有其他方法来响应系统关机或注销事件?(在Windows上,JNI将使用WM_QUERYENDSESSION,在Linux上呢?)

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

4个回答

4
据我所知,Java中没有办法捕获系统关闭或注销事件。不过,你可以通过添加关闭钩子来捕获JVM正在终止的事件。
AWT 的WindowAdapter也有一个windowClosing事件,你可以重写并连接到要监视的窗口。Swing也继承了这个事件;我认为SWT也是如此。请注意,如果你重写这个事件,你必须手动释放窗口!
我相信,在MS Windows关闭时会触发这些事件,Linux/UNIX上的SIGTERM也会执行相同的操作,尽管在关闭期间,Linux会在短时间内用SIGKILL杀死应用程序。

注意,AWT的WindowAdapter只会钩住窗口上的事件。如果使用shutdown终止环境,则windowClosing或windowClosed事件将不会触发! - parasietje
似乎Linux在注销/关机时不会运行关闭挂钩。我正在调查中。 - Stefan Reich

1
我认为 Runtime.getRuntime().addShutdownHook 应该提供你所需的功能。

1

0

这并没有回答问题,但解决了其中的一部分。

在Unix GUI会话中,我认为处理注销事件的正确方式是将文档保存到临时文件中,并将信息保存在会话状态中。在会话恢复期间,程序可以重新加载临时文件,并从上次离开的地方继续进行。无需询问用户是否保存。

我只希望更多的软件能够进行透明的会话保存和恢复。太多的程序重新打开空白文档窗口,因为GUI框架只做了这么多,但实际上没有处理任何有意义的程序状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接