2012-04-14 117 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()(它已經有一段時間)做。嘗試在稍後調用它。

你的應用程序繼續運行的可能,這意味着默認的非緩衝策略的組成部分。