4

これはおそらく簡単な答えですが、私は正しいことには見えず、私は尋ねると思っていました。私はここでjava.lang.IllegalArgumentExceptionがとjava.lang.NullPointerExceptionがAndroidのjava.lang.IllegalArgumentException

を取得しています は、エラー・ログが

ある
03-20 13:13:22.872: E/SurfaceTextureClient(565): dequeueBuffer failed (No such device) 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): Exception locking surface 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): java.lang.IllegalArgumentException 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): at android.view.Surface.lockCanvasNative(Native Method) 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): at android.view.Surface.lockCanvas(Surface.java:76) 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): at com.android.internal.view.BaseSurfaceHolder.internalLockCanvas(BaseSurfaceHolder.java:184) 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): at com.android.internal.view.BaseSurfaceHolder.lockCanvas(BaseSurfaceHolder.java:161) 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): at ca.watercity.CityActivity$Blimp.render(CityActivity.java:235) 
03-20 13:13:22.879: E/BaseSurfaceHolder(565): at ca.city.CityActivity$CityThread.run(CityActivity.java:580) 
03-20 13:13:22.879: W/dalvikvm(565): threadid=11: thread exiting with uncaught exception (group=0x409c01f8) 
03-20 13:13:22.889: E/AndroidRuntime(565): FATAL EXCEPTION: Thread-79 
03-20 13:13:22.889: E/AndroidRuntime(565): java.lang.NullPointerException 
03-20 13:13:22.889: E/AndroidRuntime(565):  at ca.city.CityActivity$Blimp.render(CityActivity.java:237) 
03-20 13:13:22.889: E/AndroidRuntime(565):  at ca.city.CityActivity$CityThread.run(CityActivity.java:580) 


03-20 13:26:12.633: E/AndroidRuntime(564): java.lang.NullPointerException 

ここでそれがもたらすのコードの2行はあります。

public void render(){ 
      Canvas canvas = null; 
      try{ 
       // line 235 
       canvas = this._surfaceHolder.lockCanvas(null); 
       synchronized (this._surfaceHolder) { 
        canvas.save(); 
        this.onDraw(canvas); 
        canvas.restore(); 
       } 
      }finally{ 
       if(canvas != null){ 
        this._surfaceHolder.unlockCanvasAndPost(canvas); 
       } 
      } 
     } 

およびこれを次のコード行です。

@Override 
     public void run() { 
      while(this._running){ 
       this._blimp.render(); 
      } 
     } // line 580 

これについての助けがあれば幸いです。 ありがとうございます。

答えて

1

nullをSurfaceHolder.lockCanvasに渡しています。汚れていると見なされる矩形がないと仮定して、lockCanvas()のno引数バージョンを代わりに使用したいとします。

+0

ます。http://開発者。 android.com/reference/android/view/SurfaceHolder.html#lockCanvas%28%29 – jjm

+0

ありがとうございましたnull例外を取ったが、私はまだ同じ2行のコードでjava.lang.IllegalArgumentExceptionエラーがあります。そのエラーを引き起こしているかどうかわからない、私はこれがアンドロイド4で起こることを言及すべきであり、下のものはうまくあり、エラーが発生しないだけでアンドロイド4以上、多分それはそのバージョンと関係があります。 – user870286

+0

これは奇妙なものです。問題の半分を取り除いてくれてありがとう、私はそれを掘り起こし、他の誰かがこの問題のために答えを見つけなければ、投稿を続けます。 – user870286

0

保存中booleanあなたCanvasインスタンスが既にロックされているかどうか、あなたのCanvasunockCanvasAndPost()メソッドの実行を避けるために、前のlockCanvas()呼び出しからアンロックされていない:

private boolean canvasLocked; 

public void render() { 
    Canvas canvas = null; 
    try { 
     // line 235 
     if (!canvasLocked) { 
      canvas = this._surfaceHolder.lockCanvas(null); 
      canvasLocked = true; 
      synchronized (this._surfaceHolder) { 
       canvas.save(); 
       this.onDraw(canvas); 
       canvas.restore(); 
      } 
     } 
    } finally { 
     if (canvas != null) { 
      this._surfaceHolder.unlockCanvasAndPost(canvas); 
      canvasLocked = false; 
     } 
    } 
} 
関連する問題