2012-02-08 4 views
0

私はゲームを開発中です。プレイヤーが失敗したりレベルが完了したらダイアログを表示したいと思います。このようなコード。android opengl es:Looper.prepare()を呼び出していないスレッド内でハンドラを作成できません。

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

     } 
    } 

ログの猫はLooper.prepare(呼び出されていないスレッド内でハンドラを作成することはできませんと言う)

どのように私はそれを修正することができます。

答えて

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)); 
    } 
} 
+0

...そうのように私は今それを試してみまし作成します。それは "java.lang.illegalstateexceptionシステムサービスは、oncreate()の前にアクティビティで利用できません" – smyl

+0

どこにハンドラを配置しましたか?その音によって、アクティビティがコンテキストを取得した後に、そのサウンドを挿入する必要があります。あなたは 'onCreate()'の最後に 'Handler'をインスタンス化しようとしましたか、それがあなたのコンストラクタでインスタンス化するレンダリングクラス(私が想定しているもの)にある場合は試しましたか? – DRiFTy

+0

私のクラスはpublicクラスと似ていますレンダラーはレンダラーを実装しますレンダラーハンドラーを入れてonCreateするとNullPointerExceptionがスローされます – smyl

関連する問題