2012-04-14 81 views
2

的努力工作,这一点我难倒了几个小时后。我对Java有点新,并且可以使用一些帮助。BufferStrategy使用非法状态异常

堆栈跟踪:

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 com.mime.crystalnova.Display.render(Display.java:148) 
at com.mime.crystalnova.Display.run(Display.java:112) 
at java.lang.Thread.run(Unknown Source) 

的错误似乎与这行代码在这里:

BufferStrategy bs = getBufferStrategy(); 
if (bs == null) { 
    createBufferStrategy(3); 
    return; 
} 

奇怪的是,它给我这个错误,而调试,然后继续完美无瑕地运行。它通过可运行jar文件启动时也可以正常工作。

+0

难道你不爱[heisenbugs(http://en.wikipedia.org/wiki/Heisenbug)? – amit 2012-04-14 23:30:45

+1

我想通了。我只是多次调用createBufferStrategy()。 :d – TheElephantSeal 2012-04-14 23:34:00

+1

这可能是未来的读者有帮助。一旦您完成了解决这一问题 - 你应该张贴什么问题究竟是你如何设法解决这个问题。 [作为一个答案 - 没有什么错在回答自己的问题,只要它适合与口感好] – amit 2012-04-14 23:35:48

回答

3

它可能得到的,此时的组件不可见但你打电话createBufferStrategy()(它已经有一段时间)做。尝试在稍后调用它。

你的应用程序继续运行的可能,这意味着默认的非缓冲策略的组成部分。