谈谈JInternalFrame的对象释放问题,很有意思的,不信,那就看看

wwooqqoo 2003-12-31 04:39:27
代码如下:

import javax.swing.*;

public class Untitled1 extends JInternalFrame{
public JPanel panel = null;
JTextField textField = new JTextField();
JTextField textField2 = new JTextField();
JTextField textField3 = new JTextField();
public JPanel panel2 = new JPanel();

public Untitled1(JPanel b) {
super();
panel = b;
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}

public void jbInit() {
panel.add(panel2,null);
panel2.add(textField,null);
panel2.add(textField2,null);
panel2.add(textField3,null);
this.getContentPane().add(panel);

}

public void dispose() {
panel2.removeAll();
panel.remove(panel2);
this.getContentPane().remove(panel);
textField = null;
textField2 = null;
textField3 = null;
panel2 = null;
panel = null;
}


public static void main(String[] args) {
Untitled1 a = new Untitled1(new JPanel());
Untitled1 b = new Untitled1(new JPanel());
Untitled1 c = new Untitled1(new JPanel());
java.lang.ref.WeakReference ref1 = new java.lang.ref.WeakReference(a);
java.lang.ref.WeakReference ref2 = new java.lang.ref.WeakReference(b);
java.lang.ref.WeakReference ref3 = new java.lang.ref.WeakReference(c);
a.dispose();
b.dispose();
c.dispose();
a = null;
b = null;
c = null;
System.gc();
try {
Thread.sleep(2000);
}catch(Exception ex) {

}
if (ref1.get()!=null)
System.out.println("ref1 is not null!");
if (ref2.get()!=null)
System.out.println("ref2 is not null!");
if (ref3.get()!=null)
System.out.println("ref3 is not null!");
}
}

按照常理说应该没有语句打印出来,因为对象都已经显示的设成null,没有对象是可达的,可是却打印出“ref1 is not null!”证明还有JInternalFrame的一个实例没有回收,我一直想不明白,请各位大虾帮助!3q
...全文
67 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger_wkh52741 2004-01-05
  • 打赏
  • 举报
回复
关注...GZ!
wwooqqoo 2004-01-05
  • 打赏
  • 举报
回复
各路大侠一块来探讨探讨吧!
recover 2004-01-04
  • 打赏
  • 举报
回复
问:
窗外雪花飘啊飘,冻得小鸟喳喳叫。
哪位小姐行行好,借个小洞暖暖鸟。
答:
大哥大哥别叹气,只要你有人民币。
包你小鸟很满意,小洞里面有暖气。
recover 2004-01-04
  • 打赏
  • 举报
回复
好像 换成JFrame就不会 是这样了,为什么??

再想想.......
guoxyj 2004-01-04
  • 打赏
  • 举报
回复
JInternalFrame 和JFrame有什么区别?
wwooqqoo 2004-01-04
  • 打赏
  • 举报
回复
icebound1() :可是我已经在最后把它的成员变量进行显示的置成Null,而且它本身也被置成了Null呀?
icebound1 2004-01-04
  • 打赏
  • 举报
回复
gz是关注的意思
public Untitled1(JPanel b) {
super();
panel = b;
实力化了,所以没有回收
wwooqqoo 2004-01-04
  • 打赏
  • 举报
回复
楼上,"gz"是什么意思呀?
paulone 2004-01-04
  • 打赏
  • 举报
回复
gz
wwooqqoo 2004-01-04
  • 打赏
  • 举报
回复
好失望呀,怎么没有人回复呀?
wwooqqoo 2004-01-04
  • 打赏
  • 举报
回复
icebound1:能否说的具体点,是因为JInternalFrame的哪一个方面,从而导致问题的出现?
icebound1 2004-01-04
  • 打赏
  • 举报
回复
应为你继承的是JInternalFrame

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧