Java-如何为jframe创建bufferedStrategy

Java-如何为jframe创建bufferedStrategy,java,graphics,render,bufferstrategy,Java,Graphics,Render,Bufferstrategy,我刚开始使用java2D和java Graphics我在java中使用BufferStrategy时遇到了一些问题,我尝试了解决,但不起作用,在创建BufferStrategy时,会出现如下错误 Exception in thread "Thread-0" java.lang.IllegalStateException: Component must have a valid peer at java.awt.Component$FlipBufferStrategy.createBuffers(

我刚开始使用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)
第二个错误是调用
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();
}
我觉得这对我来说太复杂了,谢谢你的帮助:)

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

这(试图)告诉您的是,在屏幕上实现底层窗口之前,您已经尝试创建了一个
缓冲策略
——这意味着连接到本地对等方。在AWT/Swing中,窗口在第一次调整大小或使其可见时实现

因此,作为一般建议,在尝试创建
BufferStrategy

我强烈建议您看看,因为它有一个推荐工作流的优秀示例,您可以从中创建解决方案

我还建议您看看trail,因为它包含许多可运行的示例,您可以使用这些示例

我还建议不要使用框架的
缓冲策略
,而是使用添加到框架中的
画布
,这将防止您在窗口边框下绘制


你可以考虑查看一个可运行的例子:

我读链接,我用画布创建<代码> BufferStrategy <代码>,我的框架是在创建<代码> BufferStrategy < /C>之前创建的,它在调用<代码> Read()之前在<代码>初始化()/<代码>中创建框架。创建
BufferStrategy
我想问,是否有更简单的方法来渲染一个简单的矩形,而不是使用
BufferStrategy
?哦,我发现了错误!在
Display
类(contains frame)中,我试图在将画布添加到
JFrame
之前创建缓冲区,我想您想通过>“在创建
BufferStrategy
之前使窗口(可见)”,告诉我这一点,我想您的意思是
frame.setVisible(true)。谢谢你的帮助,直到我深入阅读了你的答案,我才明白,真的谢谢你=)@mhamadarsalan是的,我是建议
setVisible
,但只要该窗口已连接到本机对等机,它就应该工作(
setVisible
,我认为
setSize
触发本机对等机的创建)
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();
}