나는 주사위를 굴리고 새 스레드를 사용하여 이미지를 업데이트하고 다시 칠하는 프로그램을 사용합니다. 여기에 내 코드 내 다른 클래스에서Java 객체 동기화, 대기 및 알림
public int roll()
{
new Thread(
new Runnable() {
public void run() {
synchronized(o) {
o.notify();
for (int i = 0; i < 10; i++) {
image = randomImage();
repaint();
try {
Thread.sleep(100);
}
catch(InterruptedException ex) {
System.out.println("InterruptedException caught");
}
}
}
}
}
).start();
synchronized(o) {
try {
o.wait();
}
catch(InterruptedException ex) {
System.out.println("InterruptedException caught");
}
}
return rolled;
}
, 내가 가진 :
int rolled = dicePanel.roll();
label.setText("Rolled a + rolled");
문제는 동기화 현재의 코드로, 주사위 이미지가 애니메이션 없지만, 올바른을 반환 않는다는 것입니다 int를 압연했다. 동기화 된 코드가 없으면 이미지가 애니메이션되지만 롤 메서드는 다른 스레드가 끝내지 못하도록 0을 int로 반환합니다.
매번 이미지 코드를 반복하고 다시 칠할 수있는 방법이 있습니까? 스레드가 int 롤백을 완료 할 때까지 기다려야합니까?
첫 번째 의견 - 'o'에 방금 잠금을 설정하고 얼마 동안 유지하려는 경우 'o.notify()'를 호출하는 데 많은 목적을 볼 수 없습니다. –