2013-03-05 4 views
1

Я разрабатываю простую игру. Я хочу иметь небольшое ожидание в каждом взаимодействии цикла for, который будет выполняться при нажатии кнопки.Sleep in For loop

Я пробовал использовать 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

«Безрезультатно» означает что? Вы пытаетесь запустить этот код в потоке пользовательского интерфейса и получить исключение? – Grambot

+0

Это в пользовательском интерфейсе? Если это так, чтобы спать, вам нужно будет открутить новую нить –

ответ

6

Блокировка главной темы не рекомендуется, вместо этого я предлагаю создать Runnable и передать его существующему неиспользуемому Handler. Возможно:

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.