KeyboardFocusManager中LightweightFocusRequest的内存泄漏?

时间:2014-04-21 15:32:35

标签: java swing memory-leaks

我在java swing应用程序中看到了内存泄漏。它在DefaultKeyboardFocusManager中的HeavyweightFocusRequest下连接了LightweightFocusRequest对象。该应用程序运行在一个未修饰的,alwaysontop JFrame中。 (即全屏)。

该应用程序似乎具有焦点。用户可以点击它并进行交互(所有这些都通过鼠标进行,因为它是一个没有键盘的自助服务终端)。但是,每个产生焦点请求的交互(如显示对话框等)都会泄漏LightweightFocusRequest对象。

我能够通过堆转储和Eclipse Memory Analyzer工具确定这一点。作为一种解决方法,如果应用程序切换到全屏模式并且用户单击另一个应用程序并返回我们的应用程序,那么泄漏的内存将被回收,因为未完成的焦点请求事件全部被清除。

它表现得好像java应用程序错过了焦点获得的事件。

我在Windows下使用jre版本1.6.0_35(和_27)看到了这个问题。并非所有用户都会遇到此问题,因此我不知道其他因素有何影响。我也无法确定它是否在最新的1.7 JRE下发生或发生,因为使用的JRE版本超出了我的控制范围。大部分(90%以上)为1.6.0_20至1.6.0_39。

重现问题的所有尝试都失败了。

我的下一个策略是解决方法是在计时器上添加一个检查应用程序,以通过反射检查焦点请求队列。如果它看起来像是漏洞(100多个未完成的项目?),那么创建另一个窗口,给它焦点,重新请求焦点并关闭另一个临时窗口。

之前有没有人见过这样的问题或者有更好的解决方法?我在java bugdb和google中搜索类似的内容并不富有成效。

0 个答案:

没有答案