Java - 如何为 jframe 创建 bufferedStrategy
Java - how to create bufferedStrategy to jframe
我刚开始使用 java2D 和 java 图形 我在使用 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 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();
}
我觉得这对我来说太复杂了,谢谢你的帮助:)
Component must have a valid peer
这(试图)告诉您的是,您已尝试在底层 window 在屏幕上实现之前创建 BufferStrategy
- 这意味着,附加到本机同行。在 AWT/Swing 中,当第一次调整大小或使其可见时,window 变为现实。
因此,作为一般性建议,请在尝试创建 BufferStrategy
之前使 window 可见
我强烈建议您看一下 JavaDocs for BufferStrategy
,因为它有一个很好的推荐工作流程示例,您可以以此为基础制定解决方案。
我还建议您查看 BufferStrategy and BufferCapabilities 路径,因为它包含许多您可以尝试的可运行示例
我还建议不要使用框架的 BufferStrategy
,而是使用添加到框架的 Canvas
,这将防止您在 window 下方绘画'小号边框
您可以考虑查看类似 的可运行示例
我刚开始使用 java2D 和 java 图形 我在使用 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 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();
}
我觉得这对我来说太复杂了,谢谢你的帮助:)
Component must have a valid peer
这(试图)告诉您的是,您已尝试在底层 window 在屏幕上实现之前创建 BufferStrategy
- 这意味着,附加到本机同行。在 AWT/Swing 中,当第一次调整大小或使其可见时,window 变为现实。
因此,作为一般性建议,请在尝试创建 BufferStrategy
我强烈建议您看一下 JavaDocs for BufferStrategy
,因为它有一个很好的推荐工作流程示例,您可以以此为基础制定解决方案。
我还建议您查看 BufferStrategy and BufferCapabilities 路径,因为它包含许多您可以尝试的可运行示例
我还建议不要使用框架的 BufferStrategy
,而是使用添加到框架的 Canvas
,这将防止您在 window 下方绘画'小号边框
您可以考虑查看类似