【发布时间】:2015-05-22 00:27:22
【问题描述】:
我读到应该使用 DISPOSE_ON_CLOSE 而不是 EXIT_ON_CLOSE here 并且感到困惑。如果没有其他活动线程/帧,setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 是否会终止应用程序?
我登陆了another question,其中有a link 到一篇文章中说:
DISPOSE_ON_CLOSE – 自动隐藏和处置框架。当这是应用程序中的唯一帧时,VM 也将被终止。
如果我认为应用程序在使用DISPOSE_ON_CLOSE 作为其setDefaultCloseOperation() 的值时确实终止的假设是正确的,那么为什么当我单击退出按钮时以下应用程序不会终止?
代码:
public class Test extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Test();
}
});
}
public Test() {
super();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setPreferredSize(new Dimension(250, 250));
pack();
setVisible(true);
}
}
更新:
我目前正在运行 Mac OS Yosemite,java -version 输出:
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
我在常用的 IDE (Eclipse) 和命令行上运行该程序,但在我关闭 JFrame 后两者都保持 JVM 运行。
【问题讨论】:
-
“setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 如果没有其他活动线程/帧,是否会终止应用程序?” - 是的,这是测试是否存在的好方法任何胭脂(非守护进程)线程
-
发生了什么?这是一个例外,还是什么都没有发生?框架真的关闭了吗?
-
另外,您的测试代码对我来说工作正常(JVM 在框架关闭后终止)
-
没有例外。 JFrame 关闭,但应用程序并未终止。
-
你的代码对我来说工作正常,JVM按预期退出。