2013-02-04 1 views
0

현재 멀티 스레드 게임을하고 있습니다. 게임에 대한 업데이트를 실행하는 스레드와 게임이 진행되는 패널을 다시 그리는 스레드가 있습니다. 플레이어에서 발사하는 발사체를 담당하는 일부 코드를 편집 한 후에 모든 엔티티를 반복하고 업데이트하는 Iterator에서 ConcurrentModificationException이 발생한다는 것을 알았습니다.Rectangle2D # getCenterY는 관련없는 반복자로 하여금 CME를 던졌습니다.

getMyBounds2D().getY(); 

예외가 더 이상 업데이트 반복자에서 발생합니다 : 나는 문을 변경하는 경우 때문에

getMyBounds2D().getCenterY(); 

: 여기이 문에 문제를 격리합니다. getMyBounds2D() 메서드는 엔티티의 경계 상자를 나타내는 Rectangle2D를 반환합니다. 위의 문을 변경하면 왜 CME가 발생하고이 문제를 해결할 수 있는지 설명 할 수있는 사람이 있습니까?

+1

EDT 외부에서 awt/swing 오브젝트를 망치고 있습니까? – jtahlborn

+0

EDT는 무엇이며 그렇습니다. –

+0

EventDispatchThread 모든 리스너를 호출하고 gui의 페인팅을 수행하는 스레드 –

답변

1

EDT (이벤트 발송 스레드) 외부에서 awt/swing 객체를 처리 할 수 ​​없습니다. 다양한 GUI 객체는이 스레드만으로 단일 스레드 방식으로 처리되도록되어 있습니다. 이러한 개체를 처리하는 여러 스레드가있는 경우 모든 종류의 문제가 발생할 것이며 CME는 다른 개체와도 관련이 있습니다.

+0

어떻게 이것이 예외를 더 이상 throw하지 않는 메서드 호출을 변경한다는 사실을 설명 할 수 있을까요? –

+1

@NeilLocketz - 일관 적이거나 산발적 인 예외입니까? – jtahlborn

+0

100 % 일관되게 매번 getCenterY를 호출 할 때마다 throw됩니다. getY가 호출 될 때마다 –

관련 문제