私はポーカーゲームを実装しているjFrameを持っています。私はスレッドを持っているので、コンピュータの相手は動きに時間がかかる。私はそれを実装しようとしたので、スレッドが人間のターンが来るのを待つようにしました。しかし、私は人間のプレーヤーを入れる前に、フレームはrepaint()
を呼び出すことはありません。私はこれをチェックするためにNetbeansでデバッガを使用しました:それはフレームがrepaint()
を呼び出す行に行きますが、何らかの理由で実際にはそれをしません。ここでは、コードです:Repaint()がスレッド内で呼び出されていない
public void run() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < players.size(); j++) {
Card card = deck.draw();
players.get(i).addToHand(card);
output.append("Player " + players.get(i).getName() + " got a " + card + ".\n");
System.out.println("Player " + players.get(i).getName() + " got a " + card + ".\n");
}
}
while (true) {
if (!players.isEmpty() && players.get(0) instanceof HumanPlayer)
humansTurn = true;
if (humansTurn) {
synchronized (this) {
try {
this.wait();
} catch (InterruptedException e) {
}
}
} else if (humanMoveMade) {
playMove(humanMove, players.remove(0));
humanMoveMade = false;
}else {
//unrelated code, then:
debug.update();
repaint();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
}
}
}
基本的には人間のプレイヤーが自分の動きを作っていない、そしてそれはそのrepaint
に着くんが、それは何らかの理由で通り抜けることがないときはいつでもelse
に着くことになっています。ウィンドウは表示されますが、コンポーネントは表示されません。
編集:私はまた
... repaint()
前debug.update()
メソッド呼び出しが別のフレーム上の情報を更新することになっているが、何もがいずれかのそのウィンドウに表示されていないことを言及する必要があり、私はすぐにこれが用意持っている必要があります、私は本当にこれにいくつかの助けが必要です。何が起こっている?