我正在尝试在渲染类中创建倒计时器,倒计时器完成后将加载主菜单。
public void startTimer ()
{
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished)
{
}
public void onFinish()
{
Toast.makeText(Game.context, "TIMER ENDED", Toast.LENGTH_SHORT).show();
// put score into DB
// load up a different screen
}
}.start();
}
我尝试使用上面显示的那个,然而,当我使用它时,我的游戏意外关闭。它是导致游戏关闭的计时器(不是吐司)。
任何人都知道我可以实现此方法或修复上面给出的示例吗?
(计时器功能被置于'onSurfaceCreated')
以下是logCat中的信息:
12-10 16:41:45.796:E / AndroidRuntime(5336):致命异常:GLThread 284 12-10 16:41:45.796:E / AndroidRuntime(5336):处理:com.damienrenner.spacefruitshooter,PID:5336
12-10 16:41:45.796:E / AndroidRuntime(5336):java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
12-10 16:41:45.796:E / AndroidRuntime(5336):在android.os.Handler。(Handler.java:200)
12-10 16:41:45.796:E / AndroidRuntime(5336):在android.os.Handler。(Handler.java:114)
12-10 16:41:45.796:E / AndroidRuntime(5336):在android.os.CountDownTimer $ 1.(CountDownTimer.java:109)
12-10 16:41:45.796:E / AndroidRuntime(5336):在android.os.CountDownTimer。(CountDownTimer.java:109)
12-10 16:41:45.796:E / AndroidRuntime(5336):at com.damienrenner.spacefruitshooter.GRenderer $ 1.(GRenderer.java:274)
12-10 16:41:45.796:E / AndroidRuntime(5336):at com.damienrenner.spacefruitshooter.GRenderer.startTimer(GRenderer.java:274)
12-10 16:41:45.796:E / AndroidRuntime(5336):at com.damienrenner.spacefruitshooter.GRenderer.onSurfaceCreated(GRenderer.java:331)
12-10 16:41:45.796:E / AndroidRuntime(5336):在android.opengl.GLSurfaceView $ GLThread.guardedRun(GLSurfaceView.java:1501)
12-10 16:41:45.796:E / AndroidRuntime(5336):在android.opengl.GLSurfaceView $ GLThread.run(GLSurfaceView.java:1240)
答案 0 :(得分:0)
public void startTimer ()
{
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished)
{
}
public void onFinish()
{
runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(Game.context, "TIMER ENDED", Toast.LENGTH_SHORT).show();
// put score into DB
// load up a different screen
}
);
}
}.start();
}
当您不在UI线程中时,您希望显示UI消息。使用上面的代码来解决这个问题。