37

这两种方法有什么区别 -System.exit()JFrame.dispose()

如果我们想在单击按钮时关闭 Java Swing 应用程序,我应该使用哪种方法?

4

6 回答 6

59

System.exit();导致 Java VM 完全终止。

JFrame.dispose();导致JFrame窗口被操作系统销毁和清理。根据文档,如果没有其他可用的 Windows,这可能会导致 Java VM 终止,但这实际上应该被视为副作用而不是常态。

你选择的那个真的取决于你的情况。如果你想终止当前 Java VM 中的所有内容,你应该使用System.exit()并且所有内容都会被清理。如果你只想销毁当前窗口,如果这是唯一的窗口,它会关闭 Java VM,然后使用JFrame.dispose().

于 2012-11-13T12:08:48.073 回答
12

JFrame.dispose()

public void dispose()

释放此 Window、其子组件及其所有子组件使用的所有本机屏幕资源。也就是说,这些组件的资源将被销毁,它们消耗的任何内存都将返回给操作系统,并且它们将被标记为不可显示。通过随后调用 pack 或 show 重建本机资源,可以使 Window 及其子组件再次可显示。重新创建的 Window 及其子组件的状态将与这些对象在 Window 被释放时的状态相同(不考虑这些操作之间的其他修改)。

注意:当 Java 虚拟机 (VM) 中的最后一个可显示窗口被处理掉时,VM 可能会终止。有关详细信息,请参阅 AWT 线程问题。

System.exit()

public static void exit(int status)

终止当前运行的 Java 虚拟机。该参数用作状态码;按照惯例,非零状态码表示异常终止。该方法调用 Runtime 类中的 exit 方法。此方法永远不会正常返回。

该调用System.exit(n)实际上等同于调用:

Runtime.getRuntime().exit(n)
于 2012-11-13T12:09:17.440 回答
6

除了上述之外,您还可以使用System.exit()来返回一个退出代码,如果您使用它自动调用进程,这可能非常有用,System.exit(code);这可以帮助您确定例如在运行期间是否发生了错误。

于 2012-11-13T12:12:53.283 回答
4
  • 如果您打开了多个窗口并且只想关闭已关闭的窗口,请使用JFrame.dispose().

  • 如果要关闭所有窗口并终止应用程序,请使用System.exit()

于 2014-08-12T23:17:02.953 回答
0

JFrame.dispose() 仅影响此框架(释放此组件、其子组件和所有子组件使用的所有本机屏幕资源)。System.exit() 影响整个 JVM。

如果您想关闭所有 JFrame 或所有 Window(因为 Frames 扩展了 Windows)以有序模式终止应用程序,您可以执行以下操作:

Arrays.asList(Window.getWindows()).forEach(e -> e.dispose()); // or JFrame.getFrames()
于 2020-09-11T14:22:06.973 回答
0

如果您终止程序,则使用 System.exit(0);

另一方面,你有多个窗口,但你可以终止和关闭一个窗口,然后你使用 dispose();

于 2021-09-22T08:42:46.520 回答