这两种方法有什么区别 - System.exit()
和JFrame.dispose()
?
如果我们想在单击按钮时关闭Java Swing应用程序,我应该使用哪种方法?
答案 0 :(得分:52)
System.exit();
导致Java VM完全终止。
JFrame.dispose();
导致JFrame
窗口被操作系统销毁和清理。根据{{3}},如果没有其他Windows可用,这可能导致Java VM终止,但这应该被视为副作用而不是常态。
您选择的那个真的取决于您的情况。如果要终止当前Java VM中的所有内容,则应使用System.exit()
并清除所有内容。如果您只想破坏当前窗口,如果这是唯一的窗口,则会产生关闭Java VM的副作用,然后使用JFrame.dispose()
。
答案 1 :(得分:12)
<强> JFrame.dispose()强>
public void dispose()
释放此Window,其子组件及其所有子组件使用的所有本机屏幕资源。也就是说,这些组件的资源将被销毁,它们使用的任何内存都将返回给操作系统,并且它们将被标记为不可显示。 通过随后调用pack或show重建本机资源,可以再次显示Window及其子组件。重新创建的窗口及其子组件的状态将与窗口处置点处的这些对象的状态相同(不考虑这些操作之间的其他修改)。
注意:当处理Java虚拟机(VM)中的最后一个可显示窗口时,VM可能会终止。有关详细信息,请参阅AWT线程问题。
<强> System.exit()的强>
public static void exit(int status)
终止当前运行的Java虚拟机。该参数用作状态代码;按照惯例,非零状态代码表示异常终止。 此方法在类Runtime中调用exit方法。此方法永远不会正常返回。
通话System.exit(n)
实际上等同于通话:
Runtime.getRuntime().exit(n)
答案 2 :(得分:5)
除了上述内容之外,您还可以使用System.exit()
返回退出代码,如果您使用System.exit(code);
自动调用流程,这可能会非常有用,这可以帮助您确定例如运行期间发生错误。
答案 3 :(得分:4)
如果您打开了多个窗口并且只想关闭已关闭的窗口,请使用JFrame.dispose().
如果要关闭所有窗口并终止应用程序,请使用System.exit()
答案 4 :(得分:0)
JFrame.dispose()仅影响此框架(释放此组件,其子组件和所有子代使用的所有本机屏幕资源)。 System.exit()影响整个JVM。
如果要关闭所有JFrame或所有Window(因为Frames扩展了Windows)以有序模式终止应用程序,则可以执行以下操作:
Arrays.asList(Window.getWindows()).forEach(e -> e.dispose()); // or JFrame.getFrames()