为什么窗体调用dispose还是存在这个实例? Java中的objects是被garbage collector回收的,不是靠程序员人工回收。这是和C++的重大区别之一。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那又怎么样,你的意思是说不定规什么时候才能真正消失,但文档说只要重新调用show或者pack就能两次显示,这不和所有资源被释放矛盾吗 当然不是了看你的意思,你把Dialog定义成类的成员了,那么当然不会被回收,除非你在show之后设置为null.还有JDialog对象如果不dispose的话,即使设置为null也不会被回收,这是要注意的地方 jframe也是一样的能把你的代码贴出来看看吗 我跟踪了一下程序,第一次打开时是创建这个实例,然后show,第二次的时候,因为实例仍然存在,所以直接就打开了。有没有真正关闭的办法--------------------------------------------------如果你能在第二次中判断这个instance,那么肯定你的程序中还有指向这个instance的reference,所以该对象不能被回收 的确是引用仍然存在,因为它是一个类的实例变量,不是局部,因为这个原因?class ProjectButton extends JButton implements ActionListener { public ProjectButton(conDB conapp) { this.conIns = conapp; //设置按钮文字 setText("项目状况"); //设置按钮上的图片 setIcon(new ImageIcon("project.gif")); //对"单击"按钮事件监听 addActionListener(this); } //该类为按钮增添了监听器,当"单击"按钮时触发这段代码 public void actionPerformed(ActionEvent e) { //当"项目记录管理"子界面已经打开了就不创建该子界面, //如果该子界面没有打开则创建该子界面并且显示 if(proRecTable == null) { proRecTable = new ProjectRecordTable(conIns); proRecTable.show(); } else { proRecTable.show(); } } //数据库连接类的对象 private conDB conIns; //私有变量,"项目记录管理"子界面 private ProjectRecordTable proRecTable = null;//它是要打开的窗体}如果是实例变量,岂非每次打开都要判断一下是否为null?或者直接声明时就创建实例(不太好,占资源)还是声明为局部变量 如果你这么写,那么当然,这个ProjectRecordTable实例创建之后就会一直保存着,因为你的ProjectButton对象还有指向这个实例的应用。如果你想及时回收的话,把proRecTable申明为局部变量,或者在proRecTable.show();加上proRecTable = null;还有要注意的地方,要dispose. clone()对象克隆的问题 [j2se]访问控制修饰符protected疑问[孙卫琴原书代码] 简单图像问题 java socket 方面 请求大家帮助!!(100分) Unhandled Exception thrown: class java.lang.NullPointerException 请看看下面程序是哪里出错了,该怎么修改啊? 数据库连接 Java中使用DOM解析XML,怎么去掉格式化字符(如空格、回车、\t) 征求彩蛋意见(暨节后散分) 介绍一下关于JAVA 方面的书 如何判断一个变量的数据类型是int型的? Eclipse是否有图形开发的插件(awt和swing)?
看你的意思,你把Dialog定义成类的成员了,那么当然不会被回收,除非你在show之后设置为null.
还有JDialog对象如果不dispose的话,即使设置为null也不会被回收,这是要注意的地方
能把你的代码贴出来看看吗
--------------------------------------------------
如果你能在第二次中判断这个instance,那么肯定你的程序中还有指向这个instance的reference,所以该对象不能被回收
class ProjectButton extends JButton implements ActionListener {
public ProjectButton(conDB conapp) {
this.conIns = conapp;
//设置按钮文字
setText("项目状况");
//设置按钮上的图片
setIcon(new ImageIcon("project.gif"));
//对"单击"按钮事件监听
addActionListener(this);
} //该类为按钮增添了监听器,当"单击"按钮时触发这段代码
public void actionPerformed(ActionEvent e) {
//当"项目记录管理"子界面已经打开了就不创建该子界面,
//如果该子界面没有打开则创建该子界面并且显示
if(proRecTable == null) {
proRecTable = new ProjectRecordTable(conIns);
proRecTable.show();
} else {
proRecTable.show();
}
} //数据库连接类的对象
private conDB conIns;
//私有变量,"项目记录管理"子界面
private ProjectRecordTable proRecTable = null;//它是要打开的窗体}
如果是实例变量,岂非每次打开都要判断一下是否为null?或者直接声明时就创建实例(不太好,占资源)还是声明为局部变量