如何使我的Java应用程序在Windows中正常关闭?

如何使我的Java应用程序在Windows中正常关闭?

How do I get my Java application to shutdown nicely in windows?

我有一个Java应用程序,当用户选择Start-> Shutdown时,我想"很好地"关闭它。 我已经尝试通过Runtime.addShutdownHook(...)使用JVM关闭侦听器,但这无法正常工作,因为我无法使用其中的任何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方法。


推荐阅读

    关闭端口linux命令?

    关闭端口linux命令?,服务,系统,工具,端口,情况,命令,防火墙,进程,指令,以下,l

    linux命令中添加用户?

    linux命令中添加用户?,系统,密码,软件,用户,命令,信息,目录,用户名,账号,文

    linux命令更改用户?

    linux命令更改用户?,系统,密码,管理,用户,命令,环境,工作,地址,电脑,文件,lin

    linux命令给用户授权?

    linux命令给用户授权?,系统,数字,管理,权限,命令,密码,工具,时间,软件,信息,l

    linux命令行关闭网页?

    linux命令行关闭网页?,服务,系统,状态,管理,命令,进程,文件,模式,指令,主机,l

    linux命令创建用户组?

    linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管

    linux命令给用户授权?

    linux命令给用户授权?,系统,数字,管理,权限,命令,密码,工具,时间,软件,信息,l

    linux命令创建用户组?

    linux命令创建用户组?,系统,代码,密码,用户组,用户,命令,信息,名称,新增,管

    查看linux用户命令行?

    查看linux用户命令行?,信息,系统,时间,名称,密码,用户,命令,地址,状态,设备,L

    linux命令关闭视图?

    linux命令关闭视图?,系统,状态,管理,百分比,信息,情况,基础,软件,观察,首次,

    linux所有用户命令行?

    linux所有用户命令行?,系统,信息,地址,工作,密码,命令,用户,时间,电脑,管理,L

    linux用户下的命令是?

    linux用户下的命令是?,系统,工作,管理,地址,命令,密码,基础,信息,目录,新增,L

    linux用户登录的命令?

    linux用户登录的命令?,系统,信息,工作,地址,时间,密码,名称,命令,电脑,软件,l

    linux命令关闭防火墙?

    linux命令关闭防火墙?,服务,软件,系统,信息,设备,公共,防火墙,命令,之间,内

    linux关机用户命令?

    linux关机用户命令?,系统,工作,信息,状态,管理,命令,基础,目录,用户,功能,lin

    linux关闭防火前命令?

    linux关闭防火前命令?,系统,服务,软件,信息,管理,防火墙,命令,环境,公共,设

    linux关闭蓝牙命令?

    linux关闭蓝牙命令?,服务,系统,状态,工作,发行,名字,地址,信息,软件,情况,lin

    linux休眠关闭命令?

    linux休眠关闭命令?,系统,设备,信息,状态,代码,时间,传播,地址,控制权,投入,l

    linux关闭子进程命令?

    linux关闭子进程命令?,系统,进程,名称,软件,管理,传播,命令,信息,状态,数字,l

    关闭启动linux的命令?

    关闭启动linux的命令?,服务,系统,命令,代码,手机,软件,密码,管理,信息,状态,l