更新 - 21/09/2011Java的面板没有完全更新偶尔
我已经做了代码的初始粗略审查,任何地点,它看起来像它的更新用户界面它通过这样做:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// code goes here
}
});
用户界面的主要更新发生在一个地方,首先做了上述包装,然后要求当前可见面板在该线程内更新自己,因此如果我理解正确,它应该在之内。 ?
这就是说,我可能会错过一些奇怪的地方。我目前正在与一些AspectJ的代码中,我发现这里的工作:
http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html
,看看这是否会突出显示任何奇怪的地方,它没有做正确的事。
除此之外,还有其他想法吗?
回复:透明度假设 - 这将如何表现出来?我在找什么?虽然我已经完成了一些改进代码的工作,但它大部分都是从以前的人手中继承下来的,所以我并不像以前那样熟悉它:)
回复:粘贴代码段 - 我很乐意但是,如果不缩小问题的范围,我想不出一个合理的限制片段来发布,但我实际上不知道代码中的问题可能存在于哪里。
感谢迄今为止所有的回应。
原来的问题
我们有一个第三方系统内部承载的应用程序。我们的部分是返回的JPanel,宿主应用程序(Lagan CRM)然后将该Panel嵌入到他们的应用程序中。
在大多数情况下,这很有效,但是偶尔会发生,并且在我们所知道的一个实现中,面板没有正确更新 - 就像某些东西阻止了面板的一部分被更新。
在下面的屏幕截图中,我们的JPanel正好位于底部,左上角基本上是“INFO”按钮。
这里有几张截图演示该问题:
在这个例子中,这个问题是围绕“去不可用”和“拨号”按钮区域可见。
在这个例子中,这个问题是在同一个一般区,但它是不一样的尺寸,我们确实还没有发现关于该anomoly的面积/尺寸的任何共同点。
在这个例子中,我与用户进行了更多的沟通,看起来发生了什么事是用户在当前调用之前发现了“GO UNAVAILABLE”按钮。然后,他们开始与来电者进行对话,这意味着系统应该在左上角显示“CONNECT”,下面是电话号码,右侧有HANGUP按钮。正如你所看到的,它只是在它的外面进行更新,中间区域有一个很大的区块,它根本没有更新过,并且仍然表现得好像它们不在通话中一样。除了看起来丑陋外,还会引起问题,因为有两个或三个按钮应该替代“GO UNAVAILABLE”,这意味着功能无法访问。
我只是想展示几个例子,以便每次看到它们都是不同的块,但基本问题总是相同的。
一些基本统计:
只是发生在XP的机器。
只发生在大约10-15个使用它的站点中的一个客户站点上,但发生在该站点的所有机器上。
我问过关于窗口弹出的顶部,但他们知道他们已经给我一个截图的唯一一个,它并没有重叠很多,当然没有什么远程类似于这些模式。
Java 1.5正在这个网站上使用,将100多个工作站更新到1.6并不是不可能的,但我需要有一些合理的迹象表明它会提供帮助。
我们有许多其他网站1.5没有这个问题。
我们已经问过在机器上可能运行的其他软件,说实话,它们很少,因为它们是联络中心代理工作站,并且紧紧地停下来。
一旦主叫方挂机,该面板会自动关闭,但这意味着座席有效地丢失了该呼叫,因为他们无法对其执行任何操作。这对我意味着它基本上被阻止了更新,而不是被持续阻止。
面板在SWING中实现,没有什么特别的花哨。
任何提示,提示,指导,其他问题的建议我可以得到答案 - 甚至更好的解决方案:)将非常感激地收到。
看起来像违反了美国东部时间法则(所有访问所有组件_必须在美国东部时间发生) – kleopatra
某些代码会很有用,特别是您的面板如何连接到主机应用程序(监听器,事件... ?)第二个kleopatra对EDT规则违规发表了评论。也许你从EDT之外的主机应用程序收到通知,并且你的代码直接修改了UI? – jfpoilpret
可能是关于面板的默认[不透明度](http:// java。 sun.com/products/jfc/tsc/articles/painting/index.html#props);它因L&F而异 – trashgod