java编程:结束代码进程

来源:百度知道 编辑:UC知道 时间:2024/07/01 07:17:01
在主窗口弹出的一个小窗口中

这个小窗口有"关闭"这个按扭,而且这个按扭的事件设置完毕.

这里的问题就是:
我们采用setVisible(false);的方式来关闭这个弹出小窗口,
但这种方法实际上同直接点窗口右上方那个"X"一样.
//
为了避免我们操作时关闭小窗口同时把主窗口都关闭,我们没有使用
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//

实质是隐藏了这个小窗口,并没有结束这个小窗口的进程.

请问有什么方法可以关闭这个小窗口的进程呢?

补充:这是2个不同的java文件的:主窗口一个;小窗口一个.小窗口的MAIN函数变为一个VOID的方法与主窗口连接

首先,Java不允许你控制资源的释放,所有的资源释放都是由JVM来管理的,除非你退出JVM。
当你对资源调用dispose方法时,实际上是将资源的状态置为已废弃,gc会自动来将资源释放掉。

其次,setDefaultCloseOperation()方法是用来设置用户在此窗体上发起 "close" 时默认执行的操作。其中DISPOSE_ON_CLOSE调用任意已注册WindowListener的对象后隐藏并释放该窗体;EXIT_ON_CLOSE则使用System exit方法退出JVM。

dispose()是Window类的方法,并非Container类,它的JDK APIDOC里面这样描述:

释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。
通过随后调用 pack 或 show 重新构造本机资源,可以再次显示 Window 及其子组件。重新创建的 Window 及其子组件的状态与释放 Window 时这些对象的状态一致(不考虑这些操作之间的其他更改)。

注:当 Java 虚拟机 (VM) 中最后的可显示窗口被释放后,虚拟机可能会终止。

也就是说,调用dispose()方法是将对象占用的本地屏幕资源(screen resources)释放,对象本身并没有释放,只是底层的对应点已经释放了,所以仍然是可用的。
当然,调用底层本地屏幕资源已经被释放的对象可能会出现一些错误,有时会报一个SWTException: Widget is disposed...。

如果你的程序已经没有其他线程在运行的话,当所有的窗口都被dispose了之后,JVM也会退出。

你的问题中,只需要将该子窗口dispose掉,并且将对该窗口的引用置为null,不用管它是否还能使用,gc会自动将对象释放的(不会立即释放,对象有它的生命周期,gc会依照自己的算法进行资源回收)。

我觉得setVisible(false);和直接点窗口右上