Java JFrame和程序流程

时间:2012-12-03 20:05:47

标签: java swing jframe exit flow

当我使用JFrame创建一个简单的程序时,从setVisible方法为真的那一刻起,无论我对框架做什么,程序都不会退出。有人可以解释一下流程吗? 感谢

4 个答案:

答案 0 :(得分:3)

当您调用myJFrame.setVisible(true)时,您正在创建一个非守护程序Swing事件线程,该线程会阻止程序结束,直到此线程和所有非守护程序线程结束。注意,如果您希望程序在JFrame关闭时结束,请调用

myJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

答案 1 :(得分:3)

当JFrame打开时,我知道程序将继续更新JFrame,即使它是不可见的,也可以检查它是否再次可见,以及检查屏幕是否需要更新。如果要在JFrame关闭时关闭程序,可以使用: JFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 它不会更新检查可见性的线程,它只是在JFrame停止可见时停止程序。

答案 2 :(得分:2)

也许你错过了frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

frame无论您的框架名称是什么。

答案 3 :(得分:1)

来自setDefaultCloseOperation(int)的文档。

  

您必须指定以下选项之一:

     
      
  • DO_NOTHING_ON_CLOSE(在WindowConstants中定义):不要做任何事情;要求程序在已注册的windowClosing对象的WindowListener方法中处理操作。
  •   
  • HIDE_ON_CLOSE(..):在调用任何已注册的WindowListener对象后自动隐藏框架。
  •   
  • DISPOSE_ON_CLOSE(..):在调用任何已注册的WindowListener对象后自动隐藏和处置框架。
  •   
  • EXIT_ON_CLOSE(..):使用System退出方法退出应用程序。仅在应用程序中使用它。
  •   

我选择高亮3号,因为它通常比上一个好。这有两个原因。

  1. 多个框架实例可以按顺序打开和处理,如this example
  2. JVM在关闭最后一帧时不会退出的唯一原因是因为有其他非守护程序线程正在运行。反过来,这是他们应该正确关闭的标志。在此上下文中,“使用System.exit(n)”终止虚拟机并不构成“正确”。