SurfaceViewを使っていたときに
__java.lang.NullPointerException__が発生し、アプリが強制終了しました。
発生した部分のコードは以下です。
lang
1 @Override public void run() 2 { 3 while (thread != null) 4 { 5 process(getHolder()); 6 } 7 } 8 9 private void process(SurfaceHolder holder) 10 { 11 Canvas canvas = holder.lockCanvas(); 12 canvas.drawColor(Color.BLACK); 13 14 hoge.setHoge(canvas); // この行で例外が起きる 15 16 /* 以下続きますが、省略 */ 17
setHogeメソッドはcanvasの参照を他のクラスへ持って行くために使っています。
原因を考えてみたのですが、
参照型にnullが入っていて、それを引数で渡したからだと思うので
以下のように対策しました。
lang
1 private void process(SurfaceHolder holder) 2 { 3 Canvas canvas = holder.lockCanvas(); 4 5 6 if (canvas == null) return; // nullを参照していたら、このメソッドを抜ける 7 8 9 canvas.drawColor(Color.BLACK); 10 hoge.setHoge(canvas); // この行で例外が起きる 11 /* 以下続きますが、省略 */ 12
例外や、ヌルポに詳しくないのですが、
ヌルポは危ないということだけは分かったので、
一旦、メソッドを抜けてしまうというようにしました。
そこで、この例外が起きる理由と
それに対するより良い対策があれば教えて下さい。
参考にしたコード
ここのサンプルの onDraw() が 私のコードの process() の部分です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/19 15:33
2015/08/19 15:43
2015/08/19 15:49
2015/08/22 06:53 編集
2015/08/22 09:35 編集
2015/08/22 10:20