更新 - 2011年9月21日
我已经对代码进行了初步粗略的审查,并且它看起来正在通过以下方式更新用户界面:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// code goes here
}
});
UI的主要更新发生在一个地方,首先执行上面的包装,然后要求当前可见面板在该线程内更新自身,因此 应该在EDT中,如果我理解正确吗?
那就是说,我可能会错过一些奇怪的地方。目前我正在使用我在这里找到的一些AspectJ代码:
http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html
看看这是否会突出显示任何不正确的地方。
除此之外,还有其他想法吗?
回复:透明度假设 - 如何表现出来?我在找什么?虽然我已经做了很多工作来改进代码,但它在很大程度上是从以前的人那里继承而来的,所以我并不熟悉它,因为它可能会有所帮助:)
回复:粘贴代码片段 - 我很乐意,但是如果没有缩小问题的范围,我就无法想出一个明智的约束片段,我真的不知道问题可能存在于代码中。“ / p>感谢迄今为止的所有回复。
原始问题
我们有一个托管在第三方系统内的应用程序。我们的部分是返回的JPanel,主机应用程序(Lagan CRM)然后将该Panel嵌入到他们的应用程序中。
在大多数情况下,这种情况非常有效,但偶尔也会如此,并且在我们所知的一个实现中,面板无法正确更新 - 就像某些内容已经阻止了面板的一部分更新。
在下面的屏幕截图中,我们的JPanel位于底部,左上角基本上是“INFO”按钮。
以下是一些展示此问题的屏幕截图:
在此示例中,“Go unavailable”和“Dial”按钮区域周围会出现此问题。
在这个例子中,问题出在同一个一般区域,但它的尺寸不同,实际上我们没有发现任何关于异常区域/大小的共性。
在这个例子中,我与用户进行了更多的沟通,看起来发生的事情是用户在当前呼叫之前用户已经显示“GO UNAVAILABLE”按钮。然后他们开始与呼叫者进行对话,这意味着系统应该开始在左上方显示“CONNECT”,下面是电话号码,右侧有HANGUP按钮。正如你所看到的,它仅在它的外部更新,在中间区域有一个大块,根本没有更新,并且仍然表现得好像它们没有通话。除了看起来丑陋之外,它还会导致问题,因为有两个或三个按钮应该替换“GO UNAVAILABLE”,这意味着无法访问功能。
我只想展示一些示例,以便您每次都可以看到它们是不同的块,但基本问题始终是相同的。
一些基本统计数据:
仅在XP计算机上发生。
仅在使用它的大约10-15个网站中的一个客户网站上发生,但在该网站的所有计算机上都会发生。
我已经问过在顶部弹出的窗口,但是他们唯一知道的是他们给我发了一个屏幕截图并且没有重叠,当然也没有与这些模式类似的东西。
Java 1.5正在这个网站上使用,将100多个工作站更新到1.6并非不可能,但我需要有一些合理的迹象表明它会有所帮助。
我们在1.5上有很多其他网站没有这个问题。
我们已经询问过哪些其他软件可能在这些机器上运行,并且说实话,它们很少,因为它们是联络中心代理工作站并且紧密地固定下来。
一旦呼叫者挂机,面板就会自行调整,但这意味着代理会有效地丢失该呼叫,因为他们无法对其进行任何操作。这对我来说意味着它基本上被阻止了更新而不是被持久阻止。
Panel在SWING中实现,没有什么特别的花哨。
任何提示,提示,指导,我可以得到答案的其他问题的建议 - 甚至更好的解决方案:)都将非常感激地收到。
答案 0 :(得分:1)
由于我无法看到代码,因此您可以尝试使用我所拥有的信息来回答这个问题:)
抱歉无法提供更多帮助...... :(