我如何销毁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认为问题......
答案 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;