可能重复:
Java: How could I “intercept” Ctrl+C in a CLI application?
在Windows上,我启动了一个执行任务的java non 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的影响,但是什么?
答案 0 :(得分:2)
您无法在java中执行常规信号处理,但可以处理 Ctrl-c 。
如果您需要在VM关闭时执行某些操作,请使用关闭挂钩:Runtime.addShutdownHook。
来自文档:
Java虚拟机关闭以响应两种事件:
当最后一个非守护程序线程退出或调用exit(等效,System.exit)方法时,程序正常退出,或者
虚拟机终止以响应用户中断,例如键入^ C或系统范围的事件,例如用户注销或系统关闭。
我以前在Windows / OSX上使用过它。