【发布时间】:2012-10-29 13:23:57
【问题描述】:
我开发了一个 Java 在线分布式应用程序,它通常一直处于活动状态(不是 GUI)。
我有兴趣在关机前执行一些步骤,以防管理员对此类关机感兴趣。
我知道 CTRL^C 会停止 JVM,我想知道我是否可以在 JVM 关闭之前挂钩 CTRL^C 并执行一些额外的操作,或者在 CTRL^D 事件中添加一些挂钩以执行相同的操作。
我几乎可以肯定某处有一个帖子描述了类似的问题,我希望能提供指向此类帖子的链接。
我对任何第三方外部 jar 或任何 JNI 解决方案不感兴趣。
如果没有讨论相同问题的帖子,我将不胜感激代码示例 sn-p。
附加限制:此解决方案应适用于 UNIX 和 Windows。
编辑
这里提出的一个解决方案是使用Runtime.getRuntime().addShutdownHook(new Thread() {})
据我了解,创建了一个新线程,它将侦听并等待关闭事件发生。
我想知道是否可以通过某种方式向主线程发出关闭发生的信号(如前所述,我有一个分布式系统,我需要通知每个线程此类事件)?
我可以添加多个线程来监听这个事件吗?
【问题讨论】:
-
在 Unix 系统上,Ctrl+D 结束标准输入。 Ctrl+终端处理的任何内容。所以你不能在Java程序中挂钩Ctrl+whatever。
-
@ignis: CTRL^* 不是必须的,欢迎任何其他组合
-
@beny23:+1,谢谢,我错过了这篇文章,希望它会有所帮助,我现在就去看看
-
@beny23:请看我的编辑,很抱歉我已经更新了问题,我可能不得不打开一个新问题,我将非常感谢对扩展问题的回答。
标签: java event-handling shutdown multiplatform