2014-03-28 126 views
0

我有这样一段代码代码不执行

// If we click on an unfolded card 
if (card.clicked == false) { 
    clicksCount++; 
    clickedCards[clicksCount - 1] = card; 

    card.showCardImage(); 

    if (clicksCount == 2) { 

     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException ex) { 
      Thread.currentThread().interrupt(); 
     } 
     // Loop through clicked cards and if they don't have the 
     // same ID fold them 
     if (clickedCards[0].cardID != clickedCards[1].cardID) { 

      for (int k = 0; k < clickedCards.length; k++) { 
       clickedCards[k].setDefaultIcon(); 
       clickedCards[k].clicked = false; 
      } 

      failedAttempts.setText("Failed Attempts: " 
        + ++failedCount); 
     } 

     attemptsCount++; 
     attempts.setText("Attempts " + attemptsCount); 
     clicksCount = 0; // reset click counter 

    } 
} 

这功能我pexeso游戏。第一张牌显示卡的图像很好,但是当我第二次点击时,它不显示图像。它只是等待,然后折叠第一张牌。

我知道这是因为睡觉的线程,但不知道该怎么办。

我会很高兴任何想法或建议。

+1

什么是'卡'(我的水晶球在问'cardID'是否是一个字符串) – 2014-03-28 19:04:02

+1

你也可能想使用一个调试器并自己弄清楚(或缩小问题) – 2014-03-28 19:04:45

+0

@RC .:调试器,虽然通常很有用,但在这里并没有什么帮助,因为程序的逻辑工作得很好,但是问题的原因,Thread.sleep(...)冻结了Swing事件调度线程(EDT),从而冻结了Swing图形,将是很难与标准调试器隔离的东西。 –

回答

1

我猜这是一个Swing GUI(你永远不会告诉我们)。如果是这样,那么你是对的:在Swing事件线程上调用Thread.sleep(...)将使整个GUI进入休眠状态,包括所有GUI绘图。取而代之的是使用设置为1000毫秒延迟的摆动计时器。在您的定时器的ActionListener中,您将把卡更换回原来的位置。你会告诉计时器不要通过setter方法重复,setRepeats(false)

The Swing Timer Tutorial

+0

非常感谢,这正是我想知道的:)并且下次我会告诉它是哪个gui:D – user13746

+0

@ user13746:不客气。祝你好运! –