2013-03-05 3 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

+0

UI 스레드에 있습니까? 그렇다면 잠자기를하려면 새로운 실을 시작해야합니다. –

답변

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.