Java Surfaceview绘制线程错误NULLPointerException
我是android的初学者。我正在创建一个简单的曲面视图来绘制线程(绘制矩形),但它不断出现如下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.graphics.Canvas.drawColor(int)” 这是我的代码: myActivity.java:Java Surfaceview绘制线程错误NULLPointerException,java,android,multithreading,nullpointerexception,surfaceview,Java,Android,Multithreading,Nullpointerexception,Surfaceview,我是android的初学者。我正在创建一个简单的曲面视图来绘制线程(绘制矩形),但它不断出现如下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.graphics.Canvas.drawColor(int)” 这是我的代码: myActivity.java: public class myActivity extends AppCompatActivity { mySurfaceView mysurfaceview;
public class myActivity extends AppCompatActivity {
mySurfaceView mysurfaceview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ball);
//mysurfaceview = new mySurfaceView(this);
mysurfaceview = (mySurfaceView) findViewById(R.id.mySurfaceView);
mysurfaceview.RunThread();
}
mySurfaceview.java:
public class mySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
public DrawThread DrawThread;
private Rect myrectangle;
private Paint myPaint;
int moveX = 0;
private void init() {
myrectangle = new Rect(150, 150, 700, 500);
myPaint = new Paint();
myPaint.setColor(Color.BLUE);
}
public mySurfaceView(Context context) {
super(context);
//init();
}
public mySurfaceView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle); }
public mySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); }
public void onDrawSomething(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawRect(myrectangle, myPaint);
}
@Override
public void surfaceCreated(SurfaceHolder holder) { }
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
@Override
public void surfaceDestroyed(SurfaceHolder holder) { }
public void update(){
}
public void RunThread() {
init();
DrawThread = new DrawThread(getHolder(), this);
DrawThread.setRunning(true);
DrawThread.start();
}
public class DrawThread extends Thread {
//var definition
public boolean run = false;
private SurfaceHolder surfaceHolder;
mySurfaceView mysurfaceView;
public DrawThread(SurfaceHolder surfaceHolder, mySurfaceView mysurfaceView) {
this.surfaceHolder = surfaceHolder;
this.mysurfaceView = mysurfaceView;
}
public void setRunning(boolean run) {
this.run = run;
}
@Override
public void run() {
while(run)
{
//implement fps counter
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas();
synchronized (surfaceHolder) {
mysurfaceView.onDrawSomething(canvas);
//mysurfaceView.update();
}
} finally {
if(canvas != null)
{
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
}
这是我用来显示曲面视图的XML代码:
<com.example.firstapp_aurelia.mySurfaceView
android:id="@+id/mySurfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
我做错什么了吗?非常感谢。我没有运行您的代码,但不要两次初始化mySurfaceView
mysurfaceview = new mySurfaceView(this);
mysurfaceview = (mySurfaceView) findViewById(R.id.mySurfaceView);
啊,对不起,我的不好,我忘了评论
mysurfaceview=newmysurfaceview(这个)代码>,应该是注释。但是,即使我对此进行了评论,应用程序还是会不断出现相同的错误。不要尝试在其他线程中绘制任何内容,在UI线程中操作画布对象,并在后台线程中更新逻辑。如果包含回溯,您的问题会更好。回溯很可能几乎完全指向问题所在。也就是说,看起来你的问题已经足够好了,可以得到答案了。