私のコードでは、私はframeLayoutにキャンバスを描画しようとしていますが、nullオブジェクト参照例外が発生しています。ちなみに私がColor.BLACKを変更したときは、黒い矩形だけを表示してエラーを表示するだけの変更はありません。 私は2.1とgenymotionアンドロイドエミュレータ6.0マシュマロdrawColorのAndroid 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);
}
}
私の活動のレイアウトコードはここにあります。
<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に割り当てると、エラーはなくなりました。 –