6

我如何销毁 Jframe 对象(就像不应该留下任何引用一样),因为我正在为 iTunes 之类的应用程序实现多用户登录系统,以便用户可以添加歌曲删除歌曲。我有 3 帧 loginFrame、adminFrame、nonAdminFrame .. loginFrame = 登录启动 nonAdminFrame 处理添加删除歌曲的地方 正在处理登录,因为我有数据文件夹,其中 .txt 文件用于写入包含歌曲的用户对象info 类型的链表。我登录的方式我查看了数据文件夹,看看是否有名为 user1.txt 文件的 .txt 文件,它会将所有数据加载到 nonadminFrame ... 问题是登录无法正常工作,因为它引用了旧的 nonAdminFrame以前的用户数据仍然存在的地方......

我有 3 个类或 3 个 JFrame。主类是 loginFrame。我获取登录信息并查看用户是管理员还是非管理员,然后通过创建新的 adminFrame() 对象或 nonAdminFrame() 对象来显示管理员或 nonadminFrame,然后我设置 loginFrame.setVisible(false); 问题在于所有 iTunes 库的东西都发生在 nonAdminFrame 上。我有 JTree 来显示该用户的所有歌曲,一旦点击注销,我使用 frame.dispose() 处理 nonAdmin 框架,但如果我再次登录,再次创建 nonadminFrame() 对象,我会看到旧用户的数据在JTree那个问题...

4

4 回答 4

15

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

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

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

于 2013-03-31T19:36:12.043 回答
3

这也做同样的事情:

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

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

于 2013-03-31T19:52:36.827 回答
3

如此处所示,您无法完全回收已处理帧的内存。相反,创建一个具有单个面板的单个框架,用于CardLayout显示登录、管理和用户面板。一个例子可以在这里看到。

于 2013-03-31T21:26:59.163 回答
3

像其他人说这应该工作

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

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

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

你必须添加这个

myframe.dispose();
myframe = null;
于 2017-11-28T20:24:53.453 回答