android opengl es:无法在未调用Looper.prepare()的线程内创建处理程序

时间:2012-02-08 16:11:05

标签: android exception opengl-es

我正在开发游戏,我想在玩家失败或完成关卡时显示Dialog。像这样的代码。

    @Override
   public void onDrawFrame(GL10 gl) {
       if(fail) {           
    Dialog restart = new Dialog(SquareRenderer.this);
    restart.setContentView(R.layout.restart);
    restart.show();

        }
    }

log cat说无法在未调用Looper.prepare()

的线程内创建处理程序

我该如何解决呢?

1 个答案:

答案 0 :(得分:0)

您是否创建了Handler?这将允许您在UI线程上显示Dialog。像这样创建Handler ...

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case 0:
            Dialog restart = new Dialog(SquareRenderer.this);
            restart.setContentView(R.layout.restart);
            restart.show();
            break;
        }
    }
};

...然后当您需要显示它时,只需将消息发送到您的Handler ...

@Override
public void onDrawFrame(GL10 gl) {
    if(fail) {           
        handler.sendMessage(Message.obtain(handler, 0));
    }
}