AWT组件采用全屏独占模式

时间:2011-01-05 20:13:42

标签: windows fullscreen

我可以使用普通Swing组件的全屏独占模式,但由于某些原因,当我使用AWT组件时,我只在全屏模式下看到黑屏。在Windows7下,如果我从窗口切换(ALT-TAB),我会看到窗口预览/缩略图正确呈现。切换回应用程序后,我再次出现黑屏。

这是我的测试用例:

import java.awt.Canvas;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;

public class TestMain
{
  public static void main(String[] arg)
  {
    EventQueue.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        final GraphicsDevice screen = GraphicsEnvironment.getLocalGraphicsEnvironment().
          getDefaultScreenDevice();
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().setBackground(Color.BLUE);
        frame.getContentPane().setLayout(null);
        frame.setUndecorated(true);

        Canvas canvas = new Canvas();
        canvas.setBackground(Color.RED);
        canvas.setBounds(10, 10, 100, 100);
        frame.getContentPane().add(canvas);

        System.out.println("isFullscreenSupported=" + screen.isFullScreenSupported());
        screen.setFullScreenWindow(frame);
      }
    });
  }
}

我在Windows7 Professional 64位下运行Java 1.6.0_23。我的显卡是ATI Radeon HD 4600.我的代码有问题吗?我的显卡? JDK本身?

2 个答案:

答案 0 :(得分:2)

禁用Direct3D管道(-Dsun.java2d.d3d=false)为我解决了问题。我已经针对JDK提交了一份错误报告:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7010551

答案 1 :(得分:0)

我确认:在我尝试的许多计算机上,DirectX / Direct3D可能是一个陷阱,禁用它是我正在寻找的解决方案。我认为Direct3D的某些2D和全屏功能与可靠的Java全屏使用不兼容。

我观察到了几个症状:全屏启动时屏幕闪烁,全屏锁定,全屏结束时组件替换而不是恢复正常窗口......!

所有问题都通过此VM参数解决。

非常感谢吉利