我对优雅地关闭Java命令行程序的不同方法感兴趣.发送终止信号不是一种选择.
我可以想到几种不同的方法.
第三个是不理想的,因为经常将程序输出泵送到屏幕.第一个需要付出太多努力(我很懒).大多数程序员使用第二种选择吗?如果没有,还有什么可能/优雅/简单?
akf*_*akf 20
你可以尝试这样的事情:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() { /*
my shutdown code here
*/ }
});
Run Code Online (Sandbox Code Playgroud)
编辑:
关闭钩子不会执行应用程序的关闭.相反,它为开发人员提供了一种方法来执行他/她在关机时所希望的任何清理.
来自JavaDoc for Runtime(如果您计划使用此方法,请阅读以下内容):
关闭钩子只是一个初始化但未启动的线程.当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行.当所有挂钩都完成后,如果启用了finalization-on-exit,它将运行所有未读取的终结器.最后,虚拟机将停止....
你可以试着用Runtime.getRuntime().addShutdownHook()它来满足你的要求.通过这种方式,您可以注册一个钩子来执行清理,以便执行正常关闭.
编辑
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread)public void addShutdownHook(Thread hook)注册新的虚拟机关闭钩.Java虚拟机关闭以响应两种事件:
第二个选项 - 检查文件 - 超过第一个 - 监听端口 - 的好处是你有一定的安全可能性.
您可以在创建文件的目录上设置权限,以便只有适当的用户才能关闭该程序.如果您在端口上侦听任何用户都可以连接到它.