JRuby/Java Swing Tooltip重叠窗口框架将显示速度降低到4 Hz



我们正在构建/维护一个复杂的运动控制平台控制应用程序,该应用程序包含14个子系统,每个子系统都有自己的线程,包括几个动画2D或3D窗口。遗留需求要求JRuby 1.5.2在Java jre6 jdk1.6.0_21之上运行,Java3D 1.5.2在Windows(XP或7)之上运行。

当Java Swing工具提示在2D控制面板窗口之一的null Layout中弹出时,重叠&落在窗口的下边缘或有时是右边缘之外,则整个Windows Java屏幕更新率(对于所有窗口)从16 Hz降低到4 Hz。这种效果通常会持续到其中一个窗口被调整大小为止。有时,当工具提示消失时,这种效果会消失。偶尔这种效果根本不会发生。

这种情况在32位Windows XP和64位Windows 7上都会发生,更多地指向Java。还有其他有趣的错误,当随机无关的第三方通信应用程序运行时,Windows睡眠时钟实际上会加快,但我认为这是转移注意力——这肯定是Java+Windows窗口布局错误。最好的猜测是Windows无法处理Java快速调整有效窗口区域的大小?但是,为什么即使在工具提示弹出消失后,效果仍会继续?

一个来源报告了在确保所有工具提示"宽于150像素"方面的改进。这是一种变通方法,尽管:由于漏洞的机制尚不清楚,而且漏洞是随机的,这种有用的伏都教似乎不能保证解决方案;此外,它还排除了简短的工具提示。

有人知道为什么JRuby/Java/Swing/Windows的组合在工具提示方面出现问题吗?有什么可以认真对待的吗?

将探查器附加到正在运行的应用程序可能会提供一些见解,但随机故障通常意味着不正确的同步所有Swing GUI对象必须仅在事件调度线程上构造和操作。要查找违规行为,请使用此处引用的方法之一。ToolTipManager尝试使用轻量级组件来显示工具提示。如果你的应用程序混合了轻重量和重重量的组件,你可以尝试禁用功能:

ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);

最新更新