Java 游戏无法在第二台显示器上呈现

Java game won't render on second monitor

我正在 java 使用 Graphics2D 和 Canvas class 创建游戏。

当我 运行 程序时,JFrame 出现在我的第一台显示器上,没有任何问题。但是,当我将 JFrame 拖到我的第二台显示器上时,它会变成灰色并停止渲染任何内容,然后当我将它拖回我的第一台显示器时,程序会继续渲染..

我的游戏循环在我的 Screen class 中调用一个 draw() 方法扩展 Canvas,这是 draw 方法。

public void draw(){
    BufferStrategy bs = getBufferStrategy();
    if(bs == null){
        createBufferStrategy(2);
        bs = getBufferStrategy();
        g = (Graphics2D) bs.getDrawGraphics();
    }

    g.setColor(Color.BLACK);
    g.fillRect(0, 0, getWidth(), getHeight());

    g.setColor(Color.WHITE);
    g.drawString("Hello, this works", 300, 300);

    g.drawImage(ImageLoader.test[0][0], 100, 100, null);

    bs.show();
}

不要在您的方法范围之外保留对 Graphics(或 Graphics2D)对象的引用。

g = (Graphics2D) bs.getDrawGraphics(); 移到您的 if 块之外。每次绘制都需要获取一个新的Graphics。

您还需要在完成绘图后立即 dispose 图形。

使用 BufferStrategy 有点复杂。我建议您查看 BufferStrategy documentation 中的示例代码。特别是,您需要用循环包围渲染,这些循环检查 BufferStrategy 的 contentsRestored()contentsLost() 方法返回的值。