我有一个应该随机改变状态的计时器。我需要它开始,然后在新的随机时间后再次运行。但是当我尝试调用它时,我遇到了一个问题,我告诉我它无法在错误的线程上运行:“无法在没有调用Looper.prepare()的线程内创建处理程序”。
我怎么能避免这个?
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 :(得分:0)
您正在自己的班级中创建Handler
,此课程不会延伸Looper
。
您可以让您的课程延长Looper
,并建议致电prepare()
。
然而,在自定义类中使用Handlers
的需求通常很少。也许你可以找到并删除它
无论如何,它与TimerTask