繁体   English   中英

Repaint()未在线程中调用

[英]Repaint() not being called in Thread

我有一个正在实施扑克游戏的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 ,但它从来没有经历出于某种原因。 出现窗口,但没有任何组件。

编辑:我还应该提到在repaint()之前应该调用debug.update()方法来更新另一帧上的信息,但是该窗口中也没有任何显示...

我需要尽快做好准备,因此我确实需要一些帮助。 到底是怎么回事?

抱歉,虚惊。 我忘了检查何时创建此框架。 事实证明,我不小心调用了run()方法,而不是像通常那样运行线程(我曾尝试实现一些不同的东西)。 回到创建新线程并调用start() ,它现在可以工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM