0

キャンバス描画を介していくつかのアニメーション/ゲーム/スレッドを実行する MainActivity で SurfaceView サブクラスを作成しました。ゲームが終了するとすぐにダイアログ ボックスが表示されるようにします。new AlertDialog.Builder(MainActivity.this) を呼び出す openNewGameDialog という関数を作成しましたが、スレッドからこれを呼び出しているため、エラーが発生します。助けてください!!コードは次のとおりです。

public class MainActivity extends Activity implements OnTouchListener{

GameSurface dSurface;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dSurface=new GameSurface(this);
    dSurface.setOnTouchListener(this);
    initialize();
    setContentView(dSurface);
}
private void initialize(){
    }
@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    dSurface.pause();
}
@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    dSurface.resume();
}
private void openNewGameDialog(){
    new AlertDialog.Builder(MainActivity.this)
    .setTitle("hhhhhh")
    .setItems(R.array.ok, 
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            }
    })
    .show();
}
public class GameSurface extends SurfaceView implements Runnable{

    SurfaceHolder gameHolder;
    Thread gameThread = null;
    public GameSurface(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        gameHolder = getHolder();
    }
    public void pause(){
        isRunning = false;
        while(true)
        {
            try {
                gameThread.join();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
        gameThread=null;
    }
    public void resume(){
        isRunning = true;
        gameThread = new Thread(this);
        gameThread.start();
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(isRunning){
            if(!gameHolder.getSurface().isValid())
                continue;
            Canvas canvas = gameHolder.lockCanvas();
            canvas.draw something
            if game==ends
                            openNewGameDialog();

            gameHolder.unlockCanvasAndPost(canvas);
        }

    }

}

}

4

1 に答える 1