2

最近我遇到了 Java 的全屏独占模式。当我自己尝试时,我遇到了一些问题:在全屏模式下在 JFrame 或 Frame 中渲染完全相同的内容需要更长的时间(40 fps),而不是在未装饰和最大化的窗口中(150-200 fps)。我的屏幕设置为 50 fps,即每帧 20 毫秒,我看不到这段时间在哪里丢失。我唯一的想法是,Jave——出于某种原因——决定在全屏时使用我的板载显卡。

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
    try {
        gd.setFullScreenWindow(window);
    } finally {
        gd.setFullScreenWindow(null);
    }
} else {
    this.fullscreen = false;
}

我用一个帧来管理重绘,它试图通过暂停计算的时间将帧速率保持在一定水平。

int delta = (int) (System.currentTimeMillis() - timestamp); //timestamp: start of this round
if(animated - delta > 0)
    pause(animated - delta);

最后我使用双缓冲在框架上绘制:

public void render(Graphics2D a) { //window graphics are passed
    Graphics2D g = (Graphics2D) backBuffer.getGraphics();
    //Adjusting some rendering hints here...
    //Then drawing some stuff...
    g.dispose();
    a.drawImage(backBuffer, 0, 0, null);
}

基本上就是这样,而且仍然:所谓的高效全屏模式非常慢。

4

2 回答 2

0

尝试-Dsun.java2d.d3d=false按照此处的建议设置系统属性为什么我的 Java 应用程序在全屏模式下运行如此缓慢?(窗口化时很好)

于 2012-08-16T00:50:57.807 回答
0

如果上述答案不起作用,则以不同的方式将窗口置于全屏状态。

代替:

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if(gd.isFullScreenSupported()) {
    gd.setFullScreenWindow(window);
}

这样做(假设您使用的是JFrame):

myFrame.setUndecorated(true);
myFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
于 2014-09-24T21:16:08.390 回答