サイコロを転がし、新しいスレッドを使用してループして画像を更新し、再描画するプログラムがあります。これが私のコードです:
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 ロールが返されることです。同期されたコードがないと、画像はアニメーション化されますが、他のスレッドを終了させないため、roll メソッドは int として 0 を返します。
画像コードをループして毎回再描画する方法はありますが、スレッドが終了して int を返すまで待ちますか?