0

可能重复:
Java:我如何在 CLI 应用程序中“拦截”Ctrl+C?

在 Windows 上,我启动一个 java 非 gui 应用程序执行任务然后按 CNTL-C 程序就退出了,我的中断处理代码似乎都没有触发,即使在 main 方法中放置 try/catch 也不会显示堆栈跟踪来指示它被打断了。

public static void main(final String[] args) throws Exception
{
    try
    {
         CmdLineDecoder cld = new CmdLineDecoder();
         cld.start(args);
         System.exit(0);
    }
    catch(Exception e)
    {
         e.printStackTrace();
        throw e;
    }
}

我显然误解了 Cntl-C 的效果,但是什么?

4

1 回答 1

2

你不能在 java 中做一般的信号处理,但你可以处理Ctrl-c.

如果您需要在 VM 关闭时执行某些操作,请使用关闭挂钩:Runtime.addShutdownHook

从文档:

Java 虚拟机关闭以响应两种事件:

程序正常退出,当最后一个非守护线程退出或调用 exit(等效于 System.exit)方法时,或

虚拟机响应用户中断(例如键入 ^C)或系统范围的事件(例如用户注销或系统关闭)而终止。

我过去在 Windows/OSX 上使用过这个。

于 2012-08-22T22:17:12.120 回答