如果我作出这样为什么我的应用程序在关闭主窗口后仍然运行?
public static void main(String[] args) {
new JFrame().setVisible(true);
}
一个JFrame,然后关闭该窗口的器件的应用不会停止后(我要杀死它)。
显示应用程序主窗口的正确方法是什么?
我也想知道原因,提出解决方案。
在此先感谢。
如果我作出这样为什么我的应用程序在关闭主窗口后仍然运行?
public static void main(String[] args) {
new JFrame().setVisible(true);
}
一个JFrame,然后关闭该窗口的器件的应用不会停止后(我要杀死它)。
显示应用程序主窗口的正确方法是什么?
我也想知道原因,提出解决方案。
在此先感谢。
你应该叫你的JFrame的setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
。
示例代码:
public static void main(String[] args) {
Runnable guiCreator = new Runnable() {
public void run() {
JFrame fenster = new JFrame("Hallo Welt mit Swing");
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setVisible(true);
}
};
SwingUtilities.invokeLater(guiCreator);
}
有应用程序窗口和应用程序本身...窗口在自己的线程中运行之间的差异,并整理main()
不会结束应用程序,如果其他线程仍然活跃。当关闭窗口,你也应该确保关闭应用程序,可能通过调用System.exit(0);
尤瓦= 8-)
您必须配置框架,调用Dispose方法在窗口监听器或使用setDefaultCloseOperation。对于最后一个的参数,你可以使用两个选项:
DISPOSE_ON_CLOSE
或EXIT_ON_CLOSE
。
DISPOSE_ON_CLOSE
仅配置框架资源。
EXIT_ON_CLOSE
处置的帧资源,然后调用System.exit
。
还有就是两者之间没有真正的区别,除非你有非守护线程。 我更喜欢使用DISPOSE_ON_CLOSE
,因为这样我可以注意到我忘记终止线程,因为如果没有更多的线程在运行,JVM就会停止。这也是在不处置的情况下关闭Frame的原因不会终止应用程序,因为Swing会创建一个线程来处理仅在调用dispose时终止的事件。
您可以将窗口监听器设置为帧,以便程序在关闭后终止。
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
做到这一点,正确的方法(除非你写一个非常平凡的单窗口的应用程序,即没有其他窗口或线程等)被赶windowClosing()
事件,然后调用dispose();
方法的形式。
如果之后你的程序不完全退出,这意味着你有其他非守护进程线程中运行,并且必须停止这些最好的,你根据你的程序认为合适的。
调用System.exit()
或setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
将强制停止任何其他线程(和整个程序),这意味着你的代码不太容易移植,强制停止线程显然是危险的(以编程方式)。
我讨厌Java有时候。在我看来,这应该是默认行为。 – 2008-10-29 09:39:03