我讀到應該使用DISPOSE_ON_CLOSE而不是EXIT_ON_CLOSE here並且感到困惑。如果沒有其他活動線程/框架,setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
會終止應用程序嗎?
我降落在another question是有a link到美國的文章:此應用程序爲什麼不以DISPOSE_ON_CLOSE結束?
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的優勝美地,並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)會終止應用程序嗎?」 - 是的,這是測試是否存在任何胭脂(非守護進程)線程的好方法 – MadProgrammer
什麼是發生了什麼?這是一個例外,還是什麼都沒有發生?框架是否真的關閉? – HyperNeutrino
此外,您的測試代碼對我來說工作正常(關閉框架後JVM終止) – MadProgrammer