有时不绘制Java GUI按钮(随机).Compiz问题

Mou*_*inX 2 java user-interface swing

*编辑2:我刚刚发现这是一个compiz + java GUI问题.它显然发生在这两个元素相交的地方.我正在运行最新的Ubuntu 11.04(经典桌面,而非Unity)以及所有更新.Sun java和OpenJDK都会出现问题.它与使用Window-Rules Compiz插件有关 - 我需要使用它.

如下面的评论中所述,我之前已经验证我的控件已添加到正确的线程中.现在我发现禁用Compiz Window-Rules插件可以解决我的问题.由于我需要使用该插件,我正在寻找解决方案.*

原帖:我正在研究Java swing应用程序.它是使用NetBeans 6.9构建的.它使用GridBagLayout管理器.外观和感觉目前是Nimbus(但这似乎对我将要描述的问题没有任何影响).大多数用户在Linux上运行该应用程序.少数人使用Windows.大多数时候应用程序运行正常.但是在随机时间,没有一些GUI按钮就会打开一个视图.例如,可能缺少"保存"和"取消"按钮.其他GUI元素通常会出现(虽然我听说视图完全是空的,没有GUI元素 - 只是一个空的灰色窗口).

如果用户在上角用"X"关闭该视图并简单地重新打开它,它将被正确绘制.丢失的按钮问题发生的时间不到1%.关闭/重新打开序列几乎100%的时间修复它.(如果我没记错的话,可能需要第二次关闭/重新打开一次.)

通常,如果缺少某些按钮,则仍会正确绘制其他元素.这不会影响整个视图(表单).它似乎影响最下面的面板,但我不确定这是否实际上是一个可重复的模式.重现这一点非常困难.我每天都使用这个软件,而且我每个月看不到这个.一些用户更频繁地看到它,但它仍然很少见.

没有错误消息.我不知道下一步该尝试什么.这种行为持续存在于不同的计算机,不同的Linux发行版(虽然都基于Debian),以及许多不同的代码更改,包括更改布局管理器.(我们之前使用过NetBeans GUI设计器.)任何想法?

编辑:2011.07.05这是代码的一般情况:

public void show_some_view() {
    setTitle(...)
    setLayout(new GridBagLayout());
    JPanel butnPanel = new JPanel();
    butnPanel.setLayout(new GridBagLayout());
    try {
        //add stuff to panels (butnPanel, etc.)
    } catch (Exception e) {
        Logger.log(e);
    }
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    int[] wh = ApplicationContext.get().getDisplayWidthxHeight();
    setSize(wh[0], wh[1]);
    setFocusable(true);
    setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 5

但是在随机时间,没有一些GUI按钮就会打开一个视图.

  1. 确保将按钮添加到EDT上的GUI.有关更多信息,请阅读Swing教程中的并发部分.

  2. 确保在调用setVisible(true)之前将按钮添加到GUI中;