0

我有一个实现扑克游戏的 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()应该更新另一帧上的信息,但该窗口中也没有显示任何内容......

我需要尽快准备好这个,所以我真的需要一些帮助。到底是怎么回事?

4

1 回答 1

0

呃……对不起,虚惊一场。我忘记检查何时创建此框架。原来我不小心调用了该run()方法,而不是像往常一样运行线程(我曾尝试过事先实现一些不同的东西)。在返回创建一个新线程并调用start()之后,它现在可以工作了。

于 2012-04-16T05:32:36.663 回答