Java - 如何创建bufferedStrategy到jframe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - 如何创建bufferedStrategy到jframe相关的知识,希望对你有一定的参考价值。

我是新的使用java2D和java图形我在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 tutorial获得了这个项目的大部分代码,"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();
}

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

答案

组件必须具有有效的对等方

这是(尝试)告诉你的是,你已经尝试在屏幕上实现基础窗口之前创建一个BufferStrategy - 这意味着,附加到本地对等体。在AWT / Swing中,当窗口首次调整大小或变为可见时,将实现窗口。

因此,作为一个通用的建议,在尝试创建BufferStrategy之前使窗口可见

我强烈建议你看看JavaDocs for BufferStrategy,因为它有一个很好的推荐工作流程示例,您可以从中找到解决方案。

我还建议您查看BufferStrategy and BufferCapabilities路径,因为它包含许多可以使用的可运行示例

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

您可以考虑查看像What is the correct way to use createBufferStrategy()?这样的可运行示例

以上是关于Java - 如何创建bufferedStrategy到jframe的主要内容,如果未能解决你的问题,请参考以下文章

Java开发如何创建一个线程?

java中如何创建动态数组

如何创建并运行Java线程

Java 如何创建一个String

Java并发编程:如何创建线程?

Java并发编程:如何创建线程?