3

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

4

4 回答 4

3

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

myJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
于 2012-12-03T20:07:08.663 回答
3

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

于 2012-12-03T20:08:17.890 回答
2

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

frame你的框架的名字在哪里。

于 2012-12-03T20:08:50.133 回答
1

setDefaultCloseOperation(int).

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

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

我选择突出显示第三个,因为它通常比上一个更好。这里有两个原因。

  1. 多个框架实例可以按顺序打开和处理,如本例所示
  2. JVM 在关闭最后一帧时不会退出的唯一原因是因为有其他非守护线程正在运行。反过来,这表明它们应该被正确关闭。在这种情况下,'用'杀死虚拟机System.exit(n)'并不构成'正确'。
于 2012-12-04T01:53:08.427 回答