【发布时间】:2013-07-21 12:06:37
【问题描述】:
我有一个具有明确定义的 Try/Catch/Finally 链的应用程序,它在正常情况下退出并执行 finally 块就好了,但是当有人过早地在 GUI 中点击红色 X 时,程序完全存在(代码 = 0 ) 并且不会调用主线程的 finally 块。
事实上,我确实希望程序在单击红色 X 时退出,但我不希望跳过 finally{} 块!我在 GUI 中手动放入了 finally 块中最重要的部分,但我真的不想这样做,因为我希望 GUI 与实际程序分离:
class GUI { // ...
...
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
try {
processObject.getIndicatorFileStream().close();
} catch (Exception ignore) {}
System.exit(0);
}
});
...
}
但我更喜欢这样的电话:
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
并确保在退出后从每个线程调用所有 finally{} 块。
我知道这实际上是意料之中的。如果应用程序从一个单独的线程(比如 GUI 线程)关闭,那么主线程将停止在其轨道上。
简而言之——我如何确保 System.exit(0) 或 JFrame.EXIT_ON_CLOSE 仍会导致每个线程的 finally 块执行?
【问题讨论】:
标签: java user-interface jframe exit try-catch-finally