2008-10-29 163 views

回答

20

你应该叫你的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); 
} 
+1

我讨厌Java有时候。在我看来,这应该是默认行为。 – 2008-10-29 09:39:03

2

有应用程序窗口和应用程序本身...窗口在自己的线程中运行之间的差异,并整理main()不会结束应用程序,如果其他线程仍然活跃。当关闭窗口,你也应该确保关闭应用程序,可能通过调用System.exit(0);

尤瓦= 8-)

3

您必须配置框架,调用Dispose方法在窗口监听器或使用setDefaultCloseOperation。对于最后一个的参数,你可以使用两个选项:

DISPOSE_ON_CLOSEEXIT_ON_CLOSE

DISPOSE_ON_CLOSE仅配置框架资源。

EXIT_ON_CLOSE处置的帧资源,然后调用System.exit

还有就是两者之间没有真正的区别,除非你有非守护线程。 我更喜欢使用DISPOSE_ON_CLOSE,因为这样我可以注意到我忘记终止线程,因为如果没有更多的线程在运行,JVM就会停止。这也是在不处置的情况下关闭Frame的原因不会终止应用程序,因为Swing会创建一个线程来处理仅在调用dispose时终止的事件。

0

您可以将窗口监听器设置为帧,以便程序在关闭后终止。

 frame.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
    } 
0

做到这一点,正确的方法(除非你写一个非常平凡的单窗口的应用程序,即没有其他窗口或线程等)被赶windowClosing()事件,然后调用dispose();方法的形式。

如果之后你的程序不完全退出,这意味着你有其他非守护进程线程中运行,并且必须停止这些最好的,你根据你的程序认为合适的。

调用System.exit()setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);将强制停止任何其他线程(和整个程序),这意味着你的代码不太容易移植,强制停止线程显然是危险的(以编程方式)。

相关问题