2012-04-16 79 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) { 
      } 
     } 
    } 
} 

基本上它应该去的是else每当人类玩家不是让他或她的举动,并没有达到那个repaint,但它从来没有经历出于某种原因。该窗口出现,但没有任何组件。

编辑:我还要提到的是,repaint()之前debug.update()方法调用应该更新其他框架的信息,但没有被显示在该窗口向上...

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

回答

0

呃......对不起,虚惊一场。我忘记了检查这个帧的创建时间。事实证明,我不小心调用了run()方法,而不是像通常那样运行线程(我试图事先实现不同的东西)。回到制作新线程并致电start()后,它现在可以工作。

相关问题