我有一个实现扑克游戏的 jFrame。我有一个线程,以便计算机对手花时间处理他们的动作。我试图实现它,以便线程在有人轮到时等待。不过,在我将人类玩家放入之前,框架并没有调用repaint()
. 我已经使用 Netbeans 中的调试器来检查这一点:它确实到达了框架调用的行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) {
}
}
}
}
基本上,else
只要人类玩家不采取行动,它就应该达到那个目标,它确实达到了那个目标repaint
,但由于某种原因它永远不会通过。窗口出现,但没有任何组件。
编辑:我还应该提到,debug.update()
之前的方法调用repaint()
应该更新另一帧上的信息,但该窗口中也没有显示任何内容......
我需要尽快准备好这个,所以我真的需要一些帮助。到底是怎么回事?