如何让我的Java应用程序在Windows中很好地closures?

我有一个Java应用程序,当用户select“开始” – >“closures”时,我想closures“很好”。 我已经尝试通过Runtime.addShutdownHook(…)使用JVMclosures侦听器,但是这不起作用,因为我不能使用任何UI元素。

我也尝试在我的主应用程序UI窗口上使用退出处理程序,但它无法暂停或停止关机,据我所知。 我怎样才能妥善处理关机?

前面提到的JNI方法可能会起作用。

你可以使用JNA,它基本上是一个JNI的包装,使它更容易使用。 另外一个好处是它(至少在我看来)比原始的JNI更快,更易维护。 你可以在https://jna.dev.java.net/找到JNA。

如果你只是在开始菜单中启动应用程序,因为你想使它在Windows中像一个服务一样,你可以使用在这里找到的java服务包装: http : //wrapper.tanukisoftware.org/doc /english/download.jsp

据我所知,你需要开始使用JNI为Windows WM_QUERYENDSESSION消息设置消息处理程序。

要做到这一点(如果你是像我这样的Windows编程新手),你需要创建一个新的窗口类与新的消息处理函数(如这里所述),并从消息处理程序处理WM_QUERYENDSESSION。

注意:你需要在消息处理线程上使用JNIEnv :: GetJavaVM(…),然后使用JavaVM :: AttachCurrentThread(…),然后才能调用本地消息处理代码中的任何Java方法。