在Java窗口程序中按ctrl+c会强行中止Java程序。点击窗口关闭按钮也会强行中止程序。 Runtime.getRuntime().addShutdownHook(hooker)允许注册一个线程,在System.exit()之后、finalize被调用之前执行它。 根据文档,如果有多个程序注册了hooker, 它们会被同时启用,顺序不被保证。比如你想在关闭前透过Jms发送消息,很可能JMS服务已经关闭。 Google告诉我们,还有别的好办法,就是利用Sun的独家秘技,直接拦截系统信号。注意,在非Sun的jvm上无效。 网址:http://www.smotricz.com/kabutz/Issue043.html 简单应用如下: SignalHandler handler = new SignalHandler(){ public void handle(Signal sig) { Server.this.exit(0); } }; Signal.handle(new Signal("INT"),handler); //hook ctrl+c Signal.handle(new Signal("TERM"),handler); //hook alt+f4 OK, 这下关闭程序可以有限处理了~
posted on 2005-09-20 14:40  steeven  阅读(5487)  评论(0编辑  收藏  举报