显示 JPanel 的未修饰的全屏 JFrame 在 Alt-tab 之前不会重新绘制

Undecorated full-screen JFrame showing JPanel doesn't repaint until Alt-tab

我有一个 JPanel v。下面的函数创建了一个名为 window 的全屏 Jframe,它将以这个 JPanel 为特色。我有:

protected final void fullScreenMulti(final JPanel v)  {
    final JFrame window= new JFrame();
    window.setUndecorated(true);
    window.add(v);
    //window.setVisible(true);
    .
    .
    .
    window.validate();
    window.repaint();
    GraphicsDevice gdev = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    gdev.setFullScreenWindow(window);

    DisplayMode mode = gdev.getDisplayMode();
    window.setSize(mode.getWidth(), mode.getHeight());
}

这适用于为代码编写的默认渲染。但是,选择使用 JOGL 的 GL 渲染器会使全屏框架变为空白,我得到一个白屏。您将必须切换标签进出,或按开始来绘制面板。我尝试使用以下方法更改 window 的背景:

Container c = window.getContentPane();
c.setBackground(Color.yellow);

虽然没有任何作用,但我仍然看到白屏。 (虽然我调试的时候可以看到背景属性应用成功了。)

同时单击第二个屏幕的空白区域(window 托管在第一个屏幕上),甚至单击“开始”按钮,有时会使框架变黑并且我的鼠标适配器无法工作然后。 (这里到底发生了什么,我该如何调查?)其他时候,它与 Alt-tab 具有相同的效果。

在 Java 中没有做太多 Swing 的东西,我有点迷路了。看到它似乎在一个渲染器上工作正常而不在另一个渲染器上工作,这表明它与 GL 渲染器有关,但在我的非全屏模式下渲染 JPanels 时渲染器工作正常;另外我的理解是渲染器的作用仅仅是缓冲我的 JPanel 上的视频。(我的意思是渲染器所做的,对吧?)所以这可能是上面没有指定某些设置的情况,但是原始渲染器会处理它。有什么建议吗?

edit:不用说,删除 window.add(v) 将使框架渲染良好,改变框架背景等的结果以前不起作用,现在将在框架上可见。

这是已知的problem-Dsun.java2d.noddraw=true 解决了。