除了使用JNI之外,Java GUI应用程序是否有办法响应系统关闭或注销事件? (在Windows上,JNI会在Linux上使用WM_QUERYENDSESSION吗?)
该方法应该允许程序提示用户保存等,然后继续注销过程。
答案 0 :(得分:4)
据我所知,Java无法捕获系统关闭或注销事件。
但是,当JVM以adding a shutdown hook结束时,您可以捕获。
AWT的WindowAdapter还有一个windowClosing事件,您可以覆盖并挂钩到要监视的窗口。 Swing继承了这一点;我相信SWT也是如此。请注意,如果覆盖此事件,您必须手动处理窗口!
我相信MS Windows会在关闭时触发这些事件。我相信Linux / UNIX上的SIGTERM会做同样的事情,尽管如果这是在关机期间,Linux会很快在SIGKILL上发布应用程序。
答案 1 :(得分:1)
我认为Runtime.getRuntime()。addShutdownHook应该提供您需要的功能。
答案 2 :(得分:1)
您可以安排在JVM关闭时运行线程 - 请参阅
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread)
答案 3 :(得分:0)
这不回答问题,但解决了部分问题。
在Unix GUI会话中,我认为处理注销事件的正确方法是将文档保存到临时文件并将信息保存在会话状态中。在会话恢复期间,程序可以重新加载临时文件并占用它停止的位置。无需询问用户是否保存。
我只是希望更多软件能够进行透明会话保存和恢复。太多的程序用空文档窗口重新打开,因为使用的GUI框架做得那么多,但其余的工作都没有完成,无法实际处理任何有意义的程序状态。