나는 여기에 내 코드에서 frameLayout에 캔버스를 그려 넣으 려하고 있지만 null 객체 참조 예외가 발생했습니다. 그건 그렇고 내가 Color.BLACK 변경하면 아무것도 검은 사각형을 표시하고 오류를 제공합니다.drawColor에서 안드로이드 Null 포인터 예외
Fatal Exception:main
Process:com.example.myApp
java.lang.NullPointerException : Attempt to invoke virtual method "void android.graphics.Canvas.rawColor(int)" on a null object reference
이
public class MyCanvas extends SurfaceView implements SurfaceHolder.Callback{
private boolean mRun= false;
private final SurfaceHolder mSurfaceHolder;
private final Object mRunLock = new Object();
public MyCanvas(Context context, AttributeSet attrs){
super(context,attrs);
this.setWillNotDraw(false);
mSurfaceHolder = getHolder();
mSurfaceHolder.AddCallback(this);
}
public synchronized void run(){
if(mRun){
Canvas c = null;
try{
c = mSurfaceHolder.lockCanvas();
synchronized (mSurfaceHolder){
synchronized(mRunLock){
if(mRun) doDraw(c);
}
}
}finally
if(c != null)
{ mSurfaceHolder.unlockCanvasandPost(c); }
}
}
private void onDraw(Canvas canvas){
canvas.drawColor(Color.YELLOW);
}
}
내 활동 레이아웃 코드가 여기에 있습니다 : 나는 안드로이드 스튜디오 2.1 genymotion 안드로이드 에뮬레이터 6.0 마시 멜로 그런 식이다
오류를 사용합니다.
<view class="com.example.myapp.MyCanvas"
android:layout_width="200dp"
android:layout_height="200dp"
android:lid="@+id/mycanvas"
/>
내 활동 클래스 문제는 캔버스 lockCanvas가 null에서 반환 된 여기
MyCanvas myCanvas = (MyCanvas)findViewById(R.id.mycanvas);
myCanvas.run();
감사 surfacedestroyed 메서드가 작동했습니다. 파괴 된 mRun을 false로 지정하면 오류가 사라집니다. –