Java - как создать bufferedStrategy для jframe - PullRequest
0 голосов
/ 06 сентября 2018

Я новенький, использую java2D и java Graphics У меня возникли проблемы при использовании BufferStrategy в java, я пытался решить, но это не работает, при создании 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();
}

я думаю, что это слишком сложно для меня, спасибо за помощь:)

1 Ответ

0 голосов
/ 06 сентября 2018

Компонент должен иметь действительный узел

Что (пытается) вам сказать, так это то, что вы пытались создать BufferStrategy до того, как основное окно было реализовано на экране - это означает, что оно привязано к нативному узлу. В AWT / Swing окно становится реализованным, когда оно сначала изменяется или становится видимым.

Итак, как обобщенное предложение, сделайте окно видимым, ПРЕЖДЕ ЧЕМ вы попытаетесь создать BufferStrategy

Я бы настоятельно рекомендовал вам взглянуть на JavaDocs для BufferStrategy, поскольку в нем содержится превосходный пример рекомендуемого рабочего процесса, на котором вы можете основать свое решение.

Я бы также порекомендовал взглянуть на след BufferStrategy и BufferCapabilities , так как он содержит ряд запускаемых примеров, с которыми вы можете поиграть

Я бы также рекомендовал НЕ использовать BufferStrategy фрейма, но вместо этого использовать Canvas, который добавляется к фрейму, это предотвратит рисование под границами окна

Возможно, вы захотите взглянуть на что-то вроде Как правильно использовать createBufferStrategy ()? для запускаемого примера

...