空指针使用线程和绘图画布视图,android初学者,包括logcat

时间:2011-11-20 10:12:51

标签: java android multithreading nullpointerexception android-canvas

我一直在关注教程here

到目前为止,我有一个Gameview和一个Gameloop(一个线程)设置好了,但我只修改了我的线程中的run()方法,我在logcat中得到了这个错误:

  • ERROR / AndroidRuntime(296):java.lang.NullPointerException
  • ERROR / AndroidRuntime(296):at biz.hireholly.tutorial.GameLoop.run(GameLoop.java:76)

我猜这意味着第76行是问题?

那是: canvas = this.surfaceHolder.lockCanvas();

我在下面的代码段中对此进行了评论:

@Override
public void run()
{
    Canvas canvas;
    Log.d(TAG, "Starting Game Loop");
    while (running) {
        canvas = null;
        //try locking canvas, so only we can edit pixels on surface
        try{
            canvas = this.surfaceHolder.lockCanvas(); //LINE 76
            synchronized (surfaceHolder){ 
                this.gameView.onDraw(canvas);
            }
        } finally{
            //in case of exception, 
            //surface is not left in an inconsistent state
            if (canvas != null){
                surfaceHolder.unlockCanvasAndPost(canvas);
            }
        }
    }
}

在此处查看整个GameLoop类代码:http://pastebin.com/kfTy9vzY

你可以在这里看到我的GameView课程:http://pastebin.com/BkmnrUPU

(他们都很短)

我一直试图通过谷歌和自己一般的摆弄几天来解决这个问题,但我一直无法做到,我非常感谢任何人对此事的看法!

1 个答案:

答案 0 :(得分:4)

问题在于GameLoop.java中的构造函数。第this.surfaceHolder = surfaceHolder;行 应为this.surfaceHolder = surfaceholder;注意原始代码中的大写字母“H”。

如果您正在使用IDE,那么您会在该行上看到诸如“对变量surfaceHolder的赋值无效”的警告。