2010-02-19 3 views
-1

이 코드는 어떻게 수정합니까? 이 오류의 의미를 모르겠다 ... 각 루프마다 목록의 요소가 제거되었다는 소식을 들었지만 제거 할 항목이 보이지 않는다."AWT-EventQueue-0"의 예외 java.util

public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D) g; 
     for(Layer e : layerList) 
      e.drawLayer(g2); 
    } 

jcomponent에는 레이어라고하는 개체 목록이있어서 레이어가 Graphics에 그릴 수 있도록 Graphics를 전달합니다. 나는 어떤 층이나 아무것도 제거하지 않으므로 길을 잃는다. 도움?

+3

일반적으로 스택 추적을 게시하는 데 도움이됩니다. 더 많은 경험을 쌓으면서이 책을 읽고 그들의 큰 가치에 대해 감사하게됩니다. –

+0

정말로 스택 트레이스를 게시해야합니다. 지금 당장 우리는 예외의 이름과 메시지조차 가지고 있지 않습니다. – Thilo

답변

1

레이어 목록으로 작업 할 수있는 스레드가 두 개 이상있는 경우 동기화 블록을 아래의 예처럼 사용하는 것이 좋습니다. 이렇게하면이 문제를 방지하거나 layerList를 동기화 할 수 있지만 프로그램과 스레드 구조에 대한 정보가 없으면 무엇이 최선인지 알려주지 않아도됩니다. 동기화 된 블록 대신 옵션으로 this synchronized list을 확인하십시오.

synchronized(layerList) 
{ 
    for(Layer e : layerList) 
     e.drawLayer(g2); 
} 
+0

이것은 가능한 대답입니다. 스레드로부터 안전하지 않은 layerList에 액세스하고 있으므로 java.util.Vector를 사용하거나 synchronized를 사용하면 문제가 해결됩니다. – CharlesS

+0

@CharlesS 아직 사용하지 않는 경우 Vector를 사용하지 않는 것이 좋습니다. [Vector는 쓸모없는 것으로 간주됩니다] (http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered- 폐기되었거나 폐기 됨). –