[英]Detect windows logout event in Java application
我想你想看一下Runtime.addShutdownHook() 。 这为您提供了在JVM关闭之前完成工作的最后机会。 这使您可以检测所有应用程序关闭的实际注销,但不是它们只是临时切换用户,而是让状态准备好返回。 但是,作为警告,无论您在关机过程中计划做什么都需要简短,因为操作系统可能随时对您进行SIGKILL(或等效操作),这会立即停止JVM。
如果这不是您所需要的,您可能需要使用JNI来注册本机侦听器。 至于其他Windows事件,AWT库提供了许多用于实现大多数普通应用程序感兴趣的侦听器的类。在这种情况下,您可能对FocusEvent感兴趣。
我最好的猜测是使用ShutdownHook 。 您可以注册一个在JVM关闭后立即调用的线程。
编辑:
如果你想在windows下实现这一点,你可以创建一个不可见的窗口,并对用户注销或系统关闭时OS发送的WM_QUERYENDSESSION消息做出反应。
似乎有很多人遇到了这个问题。 虽然,Java项目的人显然不认为这是一个优先事项(原始票据大约在10年前开放)。
我在使用隐藏的JWindow的bug 4486580中发布的解决方法取得了一些成功。 但是,这种解决方法被认为是不可靠的。 我还发现了由发布该解决方案的cowwoc开始的这一点讨论: http ://forums.java.net/jive/thread.jspa?threadID = 46716。 这种解决方法总比没有好,但是在程序确定完成清理之前阻止Windows注销会很好。 当流程终止时,您不希望在流程中处于中途。
围绕这个问题打开的最新错误是6798985.它似乎已经大部分未被注意到了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.