【发布时间】:2009-09-11 05:40:25
【问题描述】:
我有一个独立的应用程序,当用户尝试通过start-->shutdown 关闭系统时,我必须通过确认对话框提示用户保存他所做的更改。
我知道通过使用signalhandlers 我们可以做到。
有人可以帮我如何使用信号处理程序
【问题讨论】:
我有一个独立的应用程序,当用户尝试通过start-->shutdown 关闭系统时,我必须通过确认对话框提示用户保存他所做的更改。
我知道通过使用signalhandlers 我们可以做到。
有人可以帮我如何使用信号处理程序
【问题讨论】:
2012 年 5 月更新(两年半后)
Trejkazcmets:
在当前版本的 Java 中,此信号处理代码失败,因为“
INT”信号“由 VM 或操作系统保留”。
此外,当请求关闭应用程序时,其他有效信号名称都不会真正触发(我只是煞费苦心地测试了所有我能找到的信号名称......)
关闭钩子大部分工作,但我们发现在我们的例子中它没有触发,所以下一步显然是求助于在 JVM 背后注册一个处理程序
“Troubleshooting Guide for HotSpot VM”的“Integrating Signal and Exception Handling”一章提到信号“SIGTERM、SIGINT、SIGHUP”仅适用于 Solaris OS 和 Linux。
仅提及 Windows 上的异常处理。
原始答案(2009 年 9 月)
ShutdownHook 应该能够处理这种情况
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
// what you want to do
}
}));
(与caveats)
另见:
作为简单信号处理的说明:
public class Aaarggh {
public static void main(String[] args) throws Exception {
Signal.handle(new Signal("INT"), new SignalHandler () {
public void handle(Signal sig) {
System.out.println(
"Aaarggh, a user is trying to interrupt me!!");
System.out.println(
"(throw garlic at user, say `shoo, go away')");
}
});
for(int i=0; i<100; i++) {
Thread.sleep(1000);
System.out.print('.');
}
}
}
【讨论】: