销毁Jframe对象

时间:2013-03-31 19:29:30

标签: java swing jframe

我如何销毁Jframe对象(不应该留下任何引用),因为我正在实现多用户登录系统到app这样的用户可以添加歌曲删除歌曲。我有3帧loginFrame,adminFrame,nonAdminFrame .. loginFrame =登录,启动nonAdminFrame,其中添加删除歌曲 正在处理登录,因为我有数据文件夹,其中.txt文件用于编写具有歌曲信息类型链接列表的用户对象。 我登录的方式我查看数据文件夹,看看是否有.txt文件名为user1.txt文件,它将所有数据加载到nonadminFrame ... 问题是登录无法正常工作,因为它对旧的nonAdminFrame的引用仍然存在以前的用户数据......

我有3个类或3个JFrame。主类是loginFrame。我获取登录信息,看看用户是admin还是nonadmin,然后通过创建一个新的adminFrame()对象或nonAdminFrame()对象来显示admin或nonadminFrame,并设置loginFrame.setVisible(false); 问题出在nonAdminFrame,其中所有的itunes库都发生了。我有JTree显示该用户的所有歌曲,一旦点击退出我使用frame.dispose()处理nonAdmin帧但如果我再次使用不同的再次登录创建一个nonadminFrame()对象,我会看到旧用户的数据JTree认为问题......

4 个答案:

答案 0 :(得分:11)

你的user1.txt文件中是否有办法注意该用户是否是管理员? 你的问题不是很清楚,但你应该可以这样做:

JFrame frame = new JFrame();
frame.dispose();

编译器将逐字处理此帧并使用垃圾收集器自动清理。

答案 1 :(得分:3)

这也是做同样的事情:

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

根据以下文章,这也将释放框架使用的所有资源:http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html

答案 2 :(得分:3)

如图here所示,您无法完全回收已处置帧的内存。相反,创建一个具有单个面板的框架,该面板使用CardLayout来显示登录,管理和用户面板。可以看到一个例子here

答案 3 :(得分:3)

和其他人一样说这应该有用

JFrame frame = new JFrame();
frame.dispose();

但是如果使用单例模式并将jframe声明为类成员

private static jFrame myframe = null ... singleton pattern...
...

你必须添加这个

myframe.dispose();
myframe = null;