2013-01-16 8 views
-1

좋아, 전체 프로그램을 일시 중지하지 않고 일시 중지하는 방법을 얻는 방법에 관해서는 잠시 후에 질문을 올렸습니다. 다음은 문맥에 대한 링크입니다 - How do I make method pause without pausing the whole program?. 내가 얻은 대답은 새 스레드를 만들고 거기에서 일시 중지하는 것입니다. 새 스레드가 작동했지만 지금은 다른 문제가 있습니다. 5 ~ 6 번 플립을 동시에 실행하고 있기 때문에 동일한 그래픽을 사용하는 세 개의 setcolor 메서드가 서로 섞이게됩니다. 일부 스레드는 녹색으로, 일부는 검정색으로, 일부는 흰색으로 설정하기 때문입니다. 그 결과 조각이 애니메이션 중에 빠르게 색이 변하는 것입니다. 이 문제를 어떻게 해결할 수 있습니까?내 setColor 메소드가 겹쳐지고 있습니까?

public void flip(int row, int col, Graphics window) 
{ 
Color a; 
    Color b = new Color(0, 100, 0); 
if (pieces[row][col]==2) 
    a = Color.black; 
else 
    a = Color.white; 
for (int size = 90; size>=0; size-=2) 
{ 
    try { Thread.sleep(5,5555); } catch (InterruptedException exc){} 
    window.setColor(b); 
    window.fillRect(row*100+3, col*100+3, 94, 94); 
    window.setColor(a); 
    window.fillOval(row*100 + 5, col*100+5+(90-size)/2, 90, size); 

} 
if (a==Color.black) 
    a=Color.white; 
else 
    a=Color.black; 
for (int size = 0; size<=90; size+=2) 
{ 
    try { Thread.sleep(5,5555); } catch (InterruptedException exc){} 
    window.setColor(b); 
    window.fillRect(row*100+3, col*100+3, 94, 94); 
    window.setColor(a); 
    window.fillOval(row*100 + 5, col*100+5+(90-size)/2, 90, size); 
} 
} 
+2

코드? ('catch (CommentTooShortException e) {}') – Doorknob

+0

죄송합니다, 그것에 대해 잊어 버렸습니다. – user1984974

답변

0

이제는 모두 동일한 값을 변경하는 스레드를 사용하고 있으므로 동기화에 대해 알아야합니다.

관련 문제