2014-07-23 7 views
0

임의로 상태를 변경해야하는 타이머가 있습니다. 새로운 무작위 시간이 지난 후에 다시 시작해야합니다. 하지만 문제가 있는데, 그걸 호출하려고 할 때 "스레드가 Looper.prepare()를 호출하지 않은 상태에서 처리기를 생성 할 수 없습니다"라는 오류 메시지가 스레드에서 실행되지 않는다고합니다.TimerTask는 호출 스레드에서 실행되지 않습니다.

어떻게하면 좋을까요?

public class GameScreen extends Screen { 
    public void startTimer(){ 

      scanTask = new TimerTask() { 

        public void run() { 
         random = new Random(); 
         int randState= random.nextInt(3); 
         state = randState; 
        } 
      }; 

      int rand = random.nextInt(7); 
      timer.schedule(scanTask, (rand + 4) * 1000); 
     } 


     public void stopScan(){ 

      if(scanTask!=null){ 
       scanTask.cancel(); 
      } 

     } 

    public GameScreen(Game game) { 
      super(game); 

      startTimer(); 
    } 
} 

다음은 오류 스택입니다.

07-23 20:49:28.917: E/AndroidRuntime(330): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
07-23 20:49:28.917: E/AndroidRuntime(330): at android.os.Handler.<init>(Handler.java:121) 
07-23 20:49:28.917: E/AndroidRuntime(330): at com.testApp.myApp.GameScreen.<init>(GameScreen.java:35) 
07-23 20:49:28.917: E/AndroidRuntime(330): at com.testApp.myApp.GameScreen.MainMenuScreen.update(MainMenuScreen.java:26) 
07-23 20:49:28.917: E/AndroidRuntime(330): at com.testApp.framework.implementation.AndroidFastRenderView.run(AndroidFastRenderView.java:41) 
07-23 20:49:28.917: E/AndroidRuntime(330): at java.lang.Thread.run(Thread.java:1019) 

답변

0

당신은 당신의 자신의 클래스의 Handler를 만드는이 클래스는 Looper를 확장하지 않습니다.

당신은 당신의 클래스가 Looper를 확장하고 prepare()이 좋습니다 호출 할 수 있습니다.

그러나 사용자 정의 클래스에 Handlers을 할 필요는 일반적으로 드물다. 어쩌면 당신은 바로 찾을 수 있고 어쨌든 그것을

을 제거, 그것은 TimerTask

+0

그게 큰 함께 할 수 없다! 이전 시도에서 처리기를 남겨 두었습니다. 사용하지 않았으므로 이런 효과를 낼 수 있다고 생각하지 않았습니다! 고마워! – Nick3