SurfaceView线程失败

时间:2013-07-16 22:45:27

标签: java android debugging surfaceview

具有画布的表面视图类中的线程继续使程序崩溃,因为该线程进入致命异常。然后是NullPointerException。它说问题出现在第28行,但是一切都很好。然后程序跳过数百帧。它说应用程序在主线程中做了太多工作。有没有什么办法解决这一问题?

以下是代码:

package com.mtprogramming.blockfight;

import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class SView extends SurfaceView implements Runnable{

SurfaceHolder sviewholder;
Thread thread = null;
Boolean game = true;
public SView(Context context) {
    // TODO Auto-generated constructor stub
    super(context);
    sviewholder = getHolder();
    thread = new Thread(this);
    thread.start();
}

@Override
public void run() {
    while(game){
        if(sviewholder.getSurface().isValid()){
            continue;
        }
        Canvas sview = sviewholder.lockCanvas();
        sview.drawRGB(33, 66, 150);
        sviewholder.unlockCanvasAndPost(sview);
    }

}

}

1 个答案:

答案 0 :(得分:0)

问题是你得到的持有者的引用是Null,因为SurfaceHolder甚至没有在你使用它时创建,不要从onCreate调用getHolder,而是实现SurfaceHolder回调并启动创建了曲面后的线程,并且一旦您对Surfaceholder实际引用...

问候!