Project不会停止在NetBeans上运行

时间:2012-07-06 17:52:58

标签: java

我开始编写一个小程序来学习更多关于java的知识,并尝试手工设计我的布局而不必总是使用NetBeans。

事情是,当我运行我的项目并关闭它时,它不会停止在NetBeans中运行,因此每次重新运行它都会创建另一个运行。通过搜索和查看我使用NetBeans创建的另一个GUI,我想添加

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

会做到这一点,但我想我错了。

有人可以解释一下我应该怎么做吗?

以下是我的程序的SSCCE:http://pastebin.com/QhKpwdDw

非常感谢你!

4 个答案:

答案 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,因为它涉及一般关闭应用程序以及如何确保它完全终止。

但要快速回答你的问题,有几种选择。


选项1

由于您在班级中扩展JFrame,因此您可以使用EXIT_ON_CLOSE退出。

setDefaultCloseOperation(EXIT_ON_CLOSE);

注意: EXIT_ON_CLOSE退出应用中的所有JFrames,而不仅仅是应用它的那个。


选项2

这很可能不是您想要的答案,但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_CLOSEEXIT_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),但应用程序退出。