6

我有一个 Java 应用程序,当用户选择 Start->Shutdown 时,我想“很好地”关闭它。我尝试通过 Runtime.addShutdownHook(...) 使用 JVM 关闭侦听器,但这不起作用,因为我无法使用其中的任何 UI 元素。

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

4

2 回答 2

4

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

为此(如果您像我一样不熟悉 Windows 编程),您需要创建一个具有新消息处理函数的新窗口类(如此所述)并处理来自消息处理程序的 WM_QUERYENDSESSION。

注意:您需要在消息处理线程上使用 JNIEnv::GetJavaVM(...) 和 JavaVM::AttachCurrentThread(...),然后才能从本机消息处理代码调用任何 Java 方法。

于 2008-09-14T22:34:01.140 回答
4

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

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

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

于 2008-09-16T13:18:51.210 回答