0

我是使用java2Djava Graphics的新手,我在使用 java 时遇到了一些问题BufferStrategy,我尝试解决但它不起作用,而创建BufferStrategy它时会出现这样的错误......

Exception in thread "Thread-0" java.lang.IllegalStateException: Component must have a valid peer
at java.awt.Component$FlipBufferStrategy.createBuffers(Component.java:4006)
at java.awt.Component$FlipBufferStrategy.<init>(Component.java:3980)
at java.awt.Component$FlipSubRegionBufferStrategy.<init>(Component.java:4503)
at java.awt.Component.createBufferStrategy(Component.java:3857)
at java.awt.Canvas.createBufferStrategy(Canvas.java:194)
at java.awt.Component.createBufferStrategy(Component.java:3781)
at java.awt.Canvas.createBufferStrategy(Canvas.java:169)
at code.Main.render(Main.java:84)
at code.Main.run(Main.java:31)
at java.lang.Thread.run(Thread.java:745)
BUILD SUCCESSFUL (total time: 24 seconds)

我在YouTube 教程中获得了这个项目的大部分代码,"at code.Main.render(Main.java:84)"指向这个渲染方法

private void render()
{
   bufferStrategy= display.getCanvas().getBufferStrategy(); //getting bufferstrategy
   if(bufferStrategy==null)
   {
       display.getCanvas().createBufferStrategy(3);// creating bufferstrategy, output says error in this line
       return;
   }
   g= bufferStrategy.getDrawGraphics(); 
   g.fillRect(1,1,width,height);//draw a rectangle
   bufferStrategy.show();//show all things (build-in method)
   g.dispose();
}

第二个错误render()是调用方法时

public void run()                           //override run to Runnable
{
    initialize();                           //create and initialize Display frame and canvas

    while (runningStatues)                  //works when game is already running
    {
        tick();                             //update variables, have no code here
        render();                           // here is contain error
    }
    stop();
}

我觉得这对我来说太复杂了,谢谢你的帮助:)

4

1 回答 1

0

组件必须有一个有效的对等体

这是(试图)告诉你的是,你试图BufferStrategy在屏幕上实现底层窗口之前创建一个 - 这意味着,附加到一个本地对等点。在 AWT/Swing 中,一个窗口在第一次调整大小或使其可见时才被实现。

因此,作为一般性建议,请在尝试创建窗口之前使窗口可见BufferStrategy

我强烈建议您查看JavaDocs,BufferStrategy因为它有一个推荐工作流的极好示例,您可以从中建立您的解决方案。

我还建议您查看BufferStrategy 和 BufferCapabilities跟踪,因为它包含许多可运行的示例,您可以使用它们

我还建议不要使用框架BufferStrategy,而是使用Canvas添加到框架中的 ,这将阻止您在窗口边框下方绘画

您可能会考虑看一下什么是使用 createBufferStrategy() 的正确方法?一个可运行的例子

于 2018-09-06T20:19:02.257 回答