正常关闭 Java 命令行程序的最佳方法

2022-09-01 18:54:58

我对优雅地关闭Java命令行程序的不同方法感兴趣。发送终止信号不是一种选择。

我可以想到几种不同的方法。

  1. 打开端口并等待连接。当一个被制造出来时,优雅地关闭。
  2. 监视要创建的文件,然后关闭。
  3. 从终端读取一些输入,例如“执行关闭”。

第三个并不理想,因为经常有程序输出泵送到屏幕上。第一个需要太多的努力(我很懒)。大多数程序员使用第二个选项吗?如果没有,还有什么可能/优雅/简单?


答案 1

你可以尝试这样的事情:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

编辑:

相反,它为开发人员提供了一种在关闭时执行他/她希望的任何清理的方法。

来自 JavaDoc for Runtime(如果您打算使用此方法,这是一个很好的阅读):

关机挂接只是一个初始化但未启动的线程。当虚拟机开始其关闭序列时,它将以某种未指定的顺序启动所有已注册的关闭挂钩,并让它们同时运行。当所有钩子都完成后,如果启用了退出时完成,它将运行所有未调用的终结器。最后,虚拟机将停止。...


答案 2

您可以尝试使用应该满足您的要求。通过这种方式,您可以注册一个钩子来执行清理,以便实现正常关闭。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 虚拟机关闭以响应两种类型的事件:

  • 当最后一个非守护程序线程退出或调用 exit(等效地称为 System.exit)方法时,程序将正常退出,或者
  • 虚拟机在响应用户中断(如键入 ^C)或系统范围的事件(如用户注销或系统关闭)时终止。

推荐