2013-05-02 46 views
1

這裏是我的環型:爲(;;)循環,使我的小程序unuseable

公共類Timer {

private Timer timer; 
private static boolean isRunning = true; 

public static void gameLoop() 
{ 
    while(isRunning) //the loop 
    { 
     try { 
      Main.cash--; 
      Thread.sleep(2000); 
     } catch (InterruptedException e) {    
      // e.printStackTrace(); 
     } 
    } 
} 
} 

當我運行小程序,我得到一個白色的屏幕,我無法靠近小程序,我必須在eclipse中使用終止按鈕。

+0

不要阻塞EDT(Event Dispatch Thread) - 當發生這種情況時GUI將「凍結」。而不是調用'Thread.sleep(n)'實現一個Swing'Timer'來重複執行任務,或者一個'SwingWorker'執行長時間運行的任務。有關更多詳細信息,請參見[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。但爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-05-03 05:39:54

回答

4
while(isRunning=true) //the loop 

...設置isRunning爲true,則返回true(任何的isRunning先前值),因此,總是執行if語句。單一=是一項任務,在這種情況下幾乎肯定不是你想要做的。

你想用==來代替:

while(isRunning==true) //the loop 

或者,更簡潔簡單的(也是最好!):

while(isRunning) //the loop 

我認爲isRunning將在其他地方設置爲false你的代碼,因爲沒有什麼在這裏設置爲false。

+1

@HovercraftFullOfEels我現在補充說,但是想要證明單等於等於兩者之間的差別,因爲這顯然是這裏的主要概念問題。 – berry120 2013-05-02 23:47:02

+0

我現在設置爲while(isRunning),但我仍然會看到一個白色的屏幕,我應該做的其他事情? (編輯問題以包含編輯) – Dave 2013-05-03 00:29:40

4

在你的while循環中,你試圖比較布爾值與=,但這是賦值操作符。它始終是true,這導致無限循環。

使用==來比較布爾值。

或更好,只需使用while (isRunning)

0

有兩個問題。

首先在while循環中使用賦值運算符而不是比較運算符。

while(isRunning=true) 

應該是:

while(isRunning==true) 

isRunning永遠不會設置爲false。

這兩個問題導致無限循環。