我已将以下代码添加到我的程序中:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("exit");
}
}){});
但是我没有看到该消息。附加信息:我正在 Java 7 上的 Netbeans IDE 内部运行该程序。
编辑:我忘了补充一点,有一个全局线程可以使程序保持活动状态。我通过按 Netbeans 右下角的 [x] 将其关闭。
JVM 可以以有序或突然的方式关闭。关闭钩子运行用于有序关闭:当最后一个normal
线程终止,有人调用System.exit
或通过其他平台特定方式(例如键入 Ctrl-C)。
关闭挂钩不会因 JVM 突然关闭而运行。当您按下 Netbeans 右下角的 [x] 时,这将导致 JVM 突然关闭,这就是关闭挂钩未启动的原因。
例如 :
public class ShutdownHook {
public void attachShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("exit");
}
});
}
public static void main(String[] args) {
ShutdownHook sample = new ShutdownHook();
sample.attachShutDownHook();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果你运行上面的代码,并让程序正常完成,你会看到exit
打印在控制台上。但是如果你按[x](3秒内)突然关闭它,关闭钩子将不会运行,并且不会有任何exit
打印在控制台上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)