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 に答える