我开始编写一个小程序来学习更多关于java的知识,并尝试手工设计我的布局而不必总是使用NetBeans。
事情是,当我运行我的项目并关闭它时,它不会停止在NetBeans中运行,因此每次重新运行它都会创建另一个运行。通过搜索和查看我使用NetBeans创建的另一个GUI,我想添加
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
会做到这一点,但我想我错了。
有人可以解释一下我应该怎么做吗?
以下是我的程序的SSCCE:http://pastebin.com/QhKpwdDw
非常感谢你!
答案 0 :(得分:1)
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/WindowConstants.html#DISPOSE_ON_CLOSE
DISPOSE_ON_CLOSE
public static final int DISPOSE_ON_CLOSE dispose-window默认窗口关闭操作。 注意:当Java虚拟机(VM)中的最后一个可显示窗口被丢弃时,VM可能会终止。有关详细信息,请参阅AWT线程问题。
参见: Window.dispose(),JInternalFrame.dispose(),常量字段值
答案 1 :(得分:1)
试试这个......
将放在JFrame 的构造函数中,或者扩展JFrame的类
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
答案 2 :(得分:1)
您可能想看一下这个问题:How to close a Java Swing application from the code,因为它涉及一般关闭应用程序以及如何确保它完全终止。
但要快速回答你的问题,有几种选择。
由于您在班级中扩展JFrame
,因此您可以使用EXIT_ON_CLOSE
退出。
setDefaultCloseOperation(EXIT_ON_CLOSE);
注意: EXIT_ON_CLOSE
退出应用中的所有JFrames
,而不仅仅是应用它的那个。
这很可能不是您想要的答案,但DISPOSE_ON_CLOSE
只会关闭您应用它的JFrame
。
如果您有多个JFrames
打开,或者您有任何其他Threads
,它们将继续运行,程序将不会结束。但是,如果您只有一个Thread
和一个JFrame
,则会关闭该应用程序。
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
我会选择选项1,不同意其他人。它直接与JFrame
绑定,不依赖于WindowConstants
,这使事情更清晰,更可靠。但更重要的是,它关闭了所有的窗口,而不仅仅是你应用它的窗口。
即使您看起来只有一个窗口,但您的程序中可能还有其他内部Threads
,而NetBeans正在那里投入。{/ p>
为了确保所有内容都关闭,您需要使用EXIT_ON_CLOSE
。
有关DISPOSE_ON_CLOSE
和EXIT_ON_CLOSE
如何不同的讨论:http://www.coderanch.com/t/340183/GUI/java/DISPOSE-CLOSE-vs-EXIT-CLOSE
JFrame's
EXIT_ON_CLOSE
上的文档:http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JFrame.html#EXIT_ON_CLOSE
DISPOSE_ON_CLOSE
和其他WindowConstants
上的文档:http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/WindowConstants.html#DISPOSE_ON_CLOSE
答案 3 :(得分:0)
如您所见(setDefaultCloseOperation doc),如果要触发窗口侦听器(例如关闭数据库连接),可以使用DISPOSE_ON_CLOSE。 在这种情况下,选择DISPOSE_ON_CLOSE而不是EXIT_ON_CLOSE是有意义的。
PS:不要忘记虽然在窗口侦听器代码的末尾添加System.exit(0)
,但应用程序退出。