简体   繁体   中英

Project won't stop running on NetBeans

I started writing a small program to learn a bit more about java and try to design my layouts by hand without always using NetBeans.

Thing is, when I run my project and close it, it won't stop running in NetBeans, so everytime I re-run it creates another run. By searching and looking at another GUI I had created using NetBeans I thought adding the

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

would do the trick, but I guess I am wrong.

Can someone please explain me what I should do?

Here is a SSCCE of my programa: http://pastebin.com/QhKpwdDw

Thank you very much in advance!

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 The dispose-window default window close operation. Note: When the last displayable window within the Java virtual machine (VM) is disposed of, the VM may terminate. See AWT Threading Issues for more information.

See Also: Window.dispose(), JInternalFrame.dispose(), Constant Field Values

Try this...

Place it inside the constructor of your JFrame or the class which extends JFrame

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

You might want to take a look at this question: How to close a Java Swing application from the code , as it deals with closing the application in general and also how to ensure it completely terminated.

But to answer your question quickly, there are a couple of options.


Option 1

Since you are extending JFrame in your class, you can just use EXIT_ON_CLOSE to quit.

setDefaultCloseOperation(EXIT_ON_CLOSE);

NOTE: EXIT_ON_CLOSE exits all JFrames in your application, not just the one it is applied to.


Option 2

This is most likely not the answer you want, but DISPOSE_ON_CLOSE will close only the JFrame you are applying it to.

If you have multiple JFrames open, or if you have any other Threads , they will keep running and the program will not end. But if you only have one Thread and one JFrame , this will close the application.

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);


My Preference

I would go with Option 1, disagreeing with everyone else. It is directly tied to JFrame and not dependent on WindowConstants , which makes things cleaner and more reliable. But more importantly, it closes all of the windows, not just the one that you apply it to.

Even though it looks like you only have one window, you may have other internal Threads elsewhere in your program that NetBeans is throwing in there.

To be sure everything closes, you want to use EXIT_ON_CLOSE .


Extra Information

For a discussion on how DISPOSE_ON_CLOSE and EXIT_ON_CLOSE differ: http://www.coderanch.com/t/340183/GUI/java/DISPOSE-CLOSE-vs-EXIT-CLOSE

Documentation on JFrame's EXIT_ON_CLOSE : http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/JFrame.html#EXIT_ON_CLOSE

Documentation on DISPOSE_ON_CLOSE and other WindowConstants : http://docs.oracle.com/javase/1.5.0/docs/api/javax/swing/WindowConstants.html#DISPOSE_ON_CLOSE

As you can see here ( setDefaultCloseOperation doc ) you can use DISPOSE_ON_CLOSE if you want to trigger a window listener (for example to close a database connection). In such a case it make sense to choose DISPOSE_ON_CLOSE instead of EXIT_ON_CLOSE.

PS : Don't forget although to add a System.exit(0) at the end of the window listener code, so that the application exits.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM