【发布时间】:2011-02-28 02:36:31
【问题描述】:
对于一个学校项目,我正在用 JAVA 编写 BlackJack 纸牌游戏。
在程序中执行几个步骤后,我的整个计算机系统变慢/卡顿,并且 JFrame 中的某些区域变黑。似乎没有重新粉刷。
我会用文字告诉你一些程序细节,而不是提交代码。
我已经对几乎每个 GUI 组件进行了广泛的扩展,以使其具有我想要的外观和感觉。几乎我使用的每个 JComponent 子组件都使用自定义图像背景和适用的抗锯齿功能重写了它的paintComponent。
在我的(自定义)JFrame 中,我加载了 JPanel 的扩展版本。此面板包含该屏幕的所有 GUI 组件。当我想切换屏幕(转到程序的不同部分)时,我切换到 JPanel 的另一个扩展版本。我通过从 JFrame 中删除所有元素并添加新面板来做到这一点。这些不同的面板实现了 ActionListeners 和 FocusListeners。
此时我的想法倾向于线程处理问题。我目前的理论是这样的:当一个面板被构建以在 JFrame 中显示时(每个面板都位于程序中的不同阶段),之前构建的面板并没有真正“销毁”,并且这些面板的侦听器保持活动状态。
我对你们的问题是,这个理论是否站得住脚......在那种情况下,有没有办法“杀死”这些小组或至少停止倾听?
如果我的理论没有意义,还有什么可能导致这些症状?会不会是对paintComponent 方法的广泛覆盖?
任何想法都会得到高度评价!
问候威尔科
【问题讨论】:
-
没有看到代码,我真的怀疑有人能帮助你。一件事——我不明白你为什么要从旧的 JPanel 中删除所有组件——这不是必需的。你的内存不足了吗?您描述的行为听起来很可能。
标签: java multithreading listener jframe jpanel