Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何释放JFrame资源?_Java_Swing - Fatal编程技术网

Java 如何释放JFrame资源?

Java 如何释放JFrame资源?,java,swing,Java,Swing,我有个问题想问你: 在JFrame上调用setVisible(false),会使它消失,对吗? 再次调用setVisible(true)会使它再次出现,这意味着该对象完全仍在RAM中,对吗? 如果我需要在按下“关闭”按钮后立即清除所有内容,正确的方法是什么(当我按下主界面中的“配置”按钮时,会显示此JFrame,因此当我按下“关闭”按钮时,它应该消失(也从RAM中消失)? 谢谢您的时间,也很抱歉我的英语不好您必须设置框架的默认关闭操作 frame.setDefaultCloseOperation

我有个问题想问你:
JFrame
上调用
setVisible(false)
,会使它消失,对吗?
再次调用
setVisible(true)
会使它再次出现,这意味着该对象完全仍在RAM中,对吗?
如果我需要在按下“关闭”按钮后立即清除所有内容,正确的方法是什么(当我按下主界面中的“配置”按钮时,会显示此
JFrame
,因此当我按下“关闭”按钮时,它应该消失(也从RAM中消失)?

谢谢您的时间,也很抱歉我的英语不好

您必须设置框架的默认关闭操作

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

您也可以尝试在机架关闭/处置后进行清理


找到相关的。

玩弄
JFrame的可见性将不允许操作系统回收窗口分配的本机资源,一种方法是调用
JFrame\dispose

/**
 * Releases all of the native screen resources used by this
 * {@code Window}, its subcomponents, and all of its owned
 * children. That is, the resources for these {@code Component}s
 * will be destroyed, any memory they consume will be returned to the
 * OS, and they will be marked as undisplayable.
 * ...
 */
public void dispose() {
    doDispose();
} 
关闭JFrame时调用dispose的另一种方法是执行以下操作

frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

您可能正在寻找
CardLayout
或一个对话框。
dispose
将释放框架所持有的本机资源,释放更多内存,但是,如果再次使框架可见,则需要更长的时间,因为它需要重新创建这些资源。您还可以通过设置
defaultCloseOperation
来影响使用的dispose方法。为了完全释放框架,您需要处理它(因此至少在代码> Debug关闭操作> /代码>设置为<代码> AddieTyOnOx<<代码>),并删除所有对框架及其内容的引用,包括要移动到新视图的ListEnsif,您应该考虑使用<代码> CARDFrase如果要从用户处收集一些会影响当前视图的信息,应使用对话框。请参阅和了解更多详细信息我不能使用cardLayout,因为主窗口是使用javaFX构建的,并且此选项窗口处于swing状态,我认为dispose()是正确的答案,它将终止JVM,但是
dispose\u ON\u CLOSE
显然会导致框架释放其本机资源,在取消对框架及其内容的引用之前,它不会被垃圾收集。从声音上看,OP想要处理框架,这样他们可以移动到程序的其他部分,但是允许框架被垃圾收集这很有趣,然后他可能会寻求手动清理。这不是答案,退出关闭等于一个系统。退出(0),整个程序被终止,不仅仅是一个frame@MaProgrammer已经指出这就是为什么我给出了手动清理的第二个链接。