Java Panel不会偶尔完全更新

时间:2011-09-20 10:11:12

标签: java swing panel freeze

更新 - 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”按钮区域周围会出现此问题。 Example 1

在这个例子中,问题出在同一个一般区域,但它的尺寸不同,实际上我们没有发现任何关于异常区域/大小的共性。 Example 2

在这个例子中,我与用户进行了更多的沟通,看起来发生的事情是用户在当前呼叫之前用户已经显示“GO UNAVAILABLE”按钮。然后他们开始与呼叫者进行对话,这意味着系统应该开始在左上方显示“CONNECT”,下面是电话号码,右侧有HANGUP按钮。正如你所看到的,它仅在它的外部更新,在中间区域有一个大块,根本没有更新,并且仍然表现得好像它们没有通话。除了看起来丑陋之外,它还会导致问题,因为有两个或三个按钮应该替换“GO UNAVAILABLE”,这意味着无法访问功能。 Example 3

我只想展示一些示例,以便您每次都可以看到它们是不同的块,但基本问题始终是相同的。

一些基本统计数据:

  1. 仅在XP计算机上发生。

  2. 仅在使用它的大约10-15个网站中的一个客户网站上发生,但在该网站的所有计算机上都会发生。

  3. 我已经问过在顶部弹出的窗口,但是他们唯一知道的是他们给我发了一个屏幕截图并且没有重叠,当然也没有与这些模式类似的东西。

  4. Java 1.5正在这个网站上使用,将100多个工作站更新到1.6并非不可能,但我需要有一些合理的迹象表明它会有所帮助。

  5. 我们在1.5上有很多其他网站没有这个问题。

  6. 我们已经询问过哪些其他软件可能在这些机器上运行,并且说实话,它们很少,因为它们是联络中心代理工作站并且紧密地固定下来。

  7. 一旦呼叫者挂机,面板就会自行调整,但这意味着代理会有效地丢失该呼叫,因为他们无法对其进行任何操作。这对我来说意味着它基本上被阻止了更新而不是被持久阻止。

  8. Panel在SWING中实现,没有什么特别的花哨。

  9. 任何提示,提示,指导,我可以得到答案的其他问题的建议 - 甚至更好的解决方案:)都将非常感激地收到。

1 个答案:

答案 0 :(得分:1)

由于我无法看到代码,因此您可以尝试使用我所拥有的信息来回答这个问题:)

  1. 如果没有从EDT完成,更新JPanel很棘手。即使从EDT完成,我在尝试更改JPanel的整个结构并重新绘制它时也遇到了问题。相反,在这些地方,我已经改为使用JTabbedpane。删除选项卡并重新创建它。更容易做到。在这种情况下,我不确定这是否会有所帮助。
  2. 接下来的布局。你在使用任何布局管理器吗?如果你有绝对定位的东西,那么根据显示器的大小和分辨率,一切都会变得混乱。我建议使用JGoodies - Forms布局。点击此处 - http://www.jgoodies.com/freeware/forms/
  3. 抱歉无法提供更多帮助...... :(