我在java的相当新的,但我怀疑我的问题是由同样的原因造成的this post麻烦与createBufferStrategy在Java中
因为这让我觉得我试图呈现在我的组件添加到容器,我只需要帮助搞清楚发生了什么。我评论了抛出IllegalStateException的行。
public void run() {
init();
long lastTime = System.nanoTime();
final double amountOfTicks = 60D;
double ns = 1000000000/amountOfTicks;
double delta = 0;
long now = System.nanoTime();
while(running)
{
delta += (now - lastTime)/ns;
lastTime = now;
if(delta >= 1)
{
tick();
delta--;
}
render(); //ISSUE HERE AND
}
stop();
}
public void tick() {
player.tick();
}
public void render() {
BufferStrategy bs = this.getBufferStrategy();
if(bs == null)
{
createBufferStrategy(3); //ISSUE HERE, TOO
return;
}
Graphics g = bs.getDrawGraphics();
//RENDER HERE
//g.fillRect(0, 0, 1200, 600);
player.render(g);
//END RENDER
g.dispose();
bs.show();
}
public static void main(String[] args)
{
Game game = new Game();
game.setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
game.setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
game.setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
Gui go = new Gui();
game.start();
//Program seems to continue running after ESC
}
错误消息
Exception in thread "Thread-0" java.lang.IllegalStateException: Component must have a valid peer
at java.awt.Component$FlipBufferStrategy.createBuffers(Unknown Source)
at java.awt.Component$FlipBufferStrategy.<init>(Unknown Source)
at java.awt.Component$FlipSubRegionBufferStrategy.<init>(Unknown Source)
at java.awt.Component.createBufferStrategy(Unknown Source)
at java.awt.Canvas.createBufferStrategy(Unknown Source)
at java.awt.Component.createBufferStrategy(Unknown Source)
at java.awt.Canvas.createBufferStrategy(Unknown Source)
at msa.devillegame.main.Game.render(Game.java:81)
at msa.devillegame.main.Game.run(Game.java:68)
at java.lang.Thread.run(Unknown Source)
组件必须有一个有效的对弹出时你不显示你的组件。这意味着:您的组件不会出现在前面!创建并显示你的框架和组件FIRST和你的缓冲区/ bufferstragey SECOND - 然后渲染! – 2014-09-02 05:24:01
当我遵循它们发生的顺序时,在main调用Gui()时,框架首先发生,但在此之后,我无法确定何时调用bufferStrategy。 – user3750325 2014-09-02 05:39:31
你不能通过简单的说出来创建Bufferstrategy!你必须询问系统是否支持缓冲策略......然后,创建一个支持的缓冲策略...... – 2014-09-02 06:07:50