具有画布的表面视图类中的线程继续使程序崩溃,因为该线程进入致命异常。然后是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);
}
}
}
答案 0 :(得分:0)
问题是你得到的持有者的引用是Null,因为SurfaceHolder甚至没有在你使用它时创建,不要从onCreate调用getHolder,而是实现SurfaceHolder回调并启动创建了曲面后的线程,并且一旦您对Surfaceholder实际引用...
问候!