2013-02-04 49 views
0

我目前正在研究多線程遊戲,有一個線程正在運行遊戲更新,一個線程正在重新繪製遊戲正在播放的面板。在編輯了一些代碼後,我們發現我從迭代器遍歷所有實體並更新它們的迭代器中獲得了一個ConcurrentModificationException異常。我孤立的問題,在這裏這個聲明:Rectangle2D#getCenterY導致不相關的迭代器拋出CME

getMyBounds2D().getCenterY(); 

因爲當我改變了語句:

getMyBounds2D().getY(); 

唯一的例外是不再更新迭代器拋出。方法getMyBounds2D()只返回一個代表實體邊界框的Rectangle2D,有沒有人可以解釋爲什麼改變上面的語句導致CME以及如何解決這個問題?

+1

你是否在與美國東部時間以外的awt/swing對象搞混了? – jtahlborn

+0

什麼是EDT,是的。 –

+0

EventDispatchThread調用所有偵聽器並執行gui繪製的線程 –

回答

1

你不能在EDT(事件調度線程)之外弄亂awt/swing對象。各種gui對象只能通過這個線程以單線程方式處理。如果你有多個線程處理這些對象,那麼這將導致各種問題,CME等等。

+0

這將如何解釋這一事實,如果我改變方法調用它不會拋出異常了? –

+1

@NeilLocketz - 是一致的還是零星的異常? – jtahlborn

+0

100%一致我每次打電話getCenterY它會拋出它,每次我打電話給getY它不 –

相關問題