我有一个正在实施扑克游戏的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()
方法调用应该更新另一帧的信息,但是那个窗口中没有任何内容显示......
我需要尽快准备好这个,所以我真的需要一些帮助。发生了什么事?
答案 0 :(得分:0)
run()
方法,而不是像通常那样运行线程(我曾试图事先实现不同的东西)。回到创建新主题并调用start()
后,它现在可以正常工作。