2012-04-16 8 views
0

私はポーカーゲームを実装しているjFrameを持っています。私はスレッドを持っているので、コンピュータの相手は動きに時間がかかる。私はそれを実装しようとしたので、スレッドが人間のターンが来るのを待つようにしました。しかし、私は人間のプレーヤーを入れる前に、フレームはrepaint()を呼び出すことはありません。私はこれをチェックするためにNetbeansでデバッガを使用しました:それはフレームがrepaint()を呼び出す行に行きますが、何らかの理由で実際にはそれをしません。ここでは、コードです: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) { 
      } 
     } 
    } 
} 

基本的には人間のプレイヤーが自分の動きを作っていない、そしてそれはそのrepaintに着くんが、それは何らかの理由で通り抜けることがないときはいつでもelseに着くことになっています。ウィンドウは表示されますが、コンポーネントは表示されません。

編集:私はまた

... repaint()debug.update()メソッド呼び出しが別のフレーム上の情報を更新することになっているが、何もがいずれかのそのウィンドウに表示されていないことを言及する必要があり、私はすぐにこれが用意持っている必要があります、私は本当にこれにいくつかの助けが必要です。何が起こっている?

答えて

0

ああ...申し訳ありませんが、誤ったアラーム。このフレームがいつ作成されるかを確認することを忘れてしまった。私は間違いなくスレッドを通常通りに実行するのではなく、私が誤ってrun()メソッドを呼び出したことが分かります(事前に別のものを実装しようとしていました)。新しいスレッドを作り直してstart()と呼んだら、今すぐ動作します。

関連する問題