2013-03-05 68 views
1

我正在開發一個簡單的遊戲。我想有一個for循環,將按鈕點擊被執行的每一個互爲作用小等。睡在for循環

我一直在使用Thread.sleep(2000)嘗試過,但都無濟於事。

這裏是點擊按鈕的代碼:

public void playClick(View v) { 
     String item; 
     try{ 
      final Handler handler = new Handler(); 
     for (int i = 0; i < stringList.size(); i++) { 

      Thread.sleep(2000); 
      item = stringList.get(i); 

      if(item.equals("left")){ 

       leftclick(); 

      }else if(item.equals("right")){ 

       rightClick(); 

      }else if(item.equals("up")){ 

       upClick(); 

      }else if(item.equals("down")){ 

       downClick(); 

      } 
     } 
     }catch(Exception e){ 
      Toast.makeText(this, ""+e.toString(), Toast.LENGTH_SHORT).show(); 
     } 

我想在for循環的每次執行等。

+1

「無濟於事」,這意味着什麼呢?你是否試圖在UI線程上運行此代碼並接收異常? – Grambot 2013-03-05 19:54:28

+0

這是在UI線程?如果是這樣,爲了睡覺,你需要分離出一個新的線程 – 2013-03-05 19:54:32

回答

6

阻塞主線程,不推薦,而不是我建議創建一個Runnable並將它傳遞給現有的,未使用的處理器。也許:

private final Handler handler = new Handler(); 
private final Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     for (String item : stringList) { 
      if(item.equals("left")){ 
       leftclick(); 
      }else if(item.equals("right")){ 
       rightClick(); 
      }else if(item.equals("up")){ 
       upClick(); 
      }else if(item.equals("down")){ 
       downClick(); 
      } 
     } 
    } 
} 

... 

public void playClick(View v) { 
    // Execute the code inside runnable in 2 seconds 
    handler.postDelayed(runnable, 2000); 
} 
0

@Sam解決方案的替代方法是使用javax.swing。 Timer