4

Это, вероятно, простой ответ, но я не могу понять, и я подумал, что попрошу. Я получаю java.lang.IllegalArgumentException и java.lang.NullPointerExceptionAndroid 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 

Вот две строки кода это воздействующие.

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. Вместо этого вы хотите использовать версию аргумента no lockCanvas(), предполагая, что у вас нет исправления, которое вы хотите считать грязным.

+0

HTTP: // разработчик. android.com/reference/android/view/SurfaceHolder.html#lockCanvas%28%29 – jjm

+0

спасибо, что удалил нулевое исключение, но у меня все еще есть ошибка java.lang.IllegalArgumentException на тех же двух строках кода. Не уверен, что вызывает эту ошибку, я должен упомянуть об этом, только в Android-4, и что-то ниже, прекрасно и не вызывает ошибок только для Android 4 и выше, возможно, это имеет какое-то отношение к этой версии. – user870286

+0

ya его странный, спасибо за то, что он избавился от половины проблемы, которую я ценю, я буду продолжать копаться в нем и публиковать, если найду ответ, если у кого-то еще нет этого. – user870286

0

Сохранить в boolean ли ваш Canvas экземпляр уже заблокирован или не для того, чтобы избежать выполнения метода unockCanvasAndPost() перед вашим Canvas отпирается от предыдущего 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; 
     } 
    } 
} 
Смежные вопросы