2017-04-14 2 views
-2
04-14 12:04:30.971 1639-1938/system_process I/WindowManager: Destroying surface Surface(name=Media:com.android.wallpaper.livepicker/com.android.wallpaper.livepicker.LiveWallpaperChange) called by com.android.server.wm.WindowStateAnimator.destroySurface:2014 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.removeLocked:1449 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2478 com.android.server.wm.WindowManagerService.removeWindowLocked:2436 com.android.server.wm.WindowManagerService.removeWindowLocked:2305 com.android.server.wm.WindowManagerService.removeWindow:2300 com.android.server.wm.Session.remove:193 
04-14 12:04:30.990 3852-3852/tianranwang.livewallpaper D/MainService: dispose 
04-14 12:04:31.018 1639-1990/system_process I/WindowManager: Destroying surface Surface(name=tianranwang.livewallpaper.MainService) called by com.android.server.wm.WindowStateAnimator.destroySurface:2014 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.removeLocked:1449 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2478 com.android.server.wm.WindowManagerService.removeWindowLocked:2436 com.android.server.wm.WindowManagerService.removeWindowLocked:2305 com.android.server.wm.WindowManagerService.removeWindow:2300 com.android.server.wm.Session.remove:193 

      --------- beginning of crash 
04-14 12:04:31.020 3852-4240/tianranwang.livewallpaper E/AndroidRuntime: FATAL EXCEPTION: Animation Thread 
      Process: tianranwang.livewallpaper, PID: 3852 
      java.lang.NullPointerException: Attempt to invoke interface method 'void android.view.SurfaceHolder.unlockCanvasAndPost(android.graphics.Canvas)' on a null object reference 
       at processing.a2d.PGraphicsAndroid2D.endDraw(Unknown Source) 
       at processing.core.PApplet.handleDraw(Unknown Source) 
       at processing.core.PSurfaceNone.callDraw(Unknown Source) 
       at processing.core.PSurfaceNone$AnimationThread.run(Unknown Source) 

が、私は、画面を回転させて(ライブ壁紙を描く)スケッチを再起動し、アプリどこで見つけることができません(常にクラッシュしているとは限りません)、スケッチ(ライブ壁紙)はバックグラウンドで実行され続けていました..AndroidのライブWallpaerがクラッシュ(NullPointerExceptionが、キャンバスがnullのオブジェクトである)が、インターフェース「セットの壁紙」で

私にはヒントがありますか?前もって感謝します。


iはprocessing.a2d.PGraphicsAndroid2D.endDraw(で見つかったことをソースコード)

https://github.com/processing/processing-android/tree/master/core/src/processing

から
public void endDraw() { 
    if (bitmap == null) return; 

    // hm, mark pixels as changed, because this will instantly do a full 
    // copy of all the pixels to the surface.. so that's kind of a mess. 
    //updatePixels(); 

// if (primaryGraphics) { 
//  if (canvas != null) { 
//  parent.getSurfaceHolder().unlockCanvasAndPost(canvas); 
//  } 
// } 

    if (primaryGraphics) { 
     SurfaceHolder holder = parent.getSurface().getSurfaceHolder(); 
     if (holder != null) { 
     Canvas screen = null; 
     try { 
      screen = holder.lockCanvas(null); 
      if (screen != null) { 
      screen.drawBitmap(bitmap, new Matrix(), null); 
      } 
     } finally { 
      if (screen != null) { 
      try { 
       holder.unlockCanvasAndPost(screen); 
      } catch (IllegalStateException ex) { 
      } 
      } 
     } 
     } 
    } else { 
     // TODO this is probably overkill for most tasks... 
     loadPixels(); 
    } 

    // Marking as modified, and then calling updatePixels() in 
    // the super class, which just sets the mx1, my1, mx2, my2 
    // coordinates of the modified area. This avoids doing the 
    // full copy of the pixels to the surface in this.updatePixels(). 
    setModified(); 
    super.updatePixels(); 
    } 

上記のコードこれはNullPointerExceptionを引き起こす可能性があります。


私はこのライブラリの新しいバージョンを処理ライブラリの新しいバージョンを更新するので、私は今この問題を抱えていません。そして、上記のコードはlibの新しいバージョンからです。 (私は古いバージョンからのコードを見ることができません)

+0

screen = holder.lockCanvas(null); 

がどのように私はAndroidのスタジオにブレークポイントを設定することができ、アニメーションのスレッドでこのNullPointerExceptionがスローされますか? – TrW236

+0

処理ライブラリの新しいバージョンを更新するので、私は今この問題を抱えていません。 – TrW236

答えて

0

'void android.view.SurfaceHolder.unlockCanvasAndPost(android.graphics.Canvas)'のインスタンスであるnullオブジェクト参照を指している問題は明らかですが、それはエラーをスローさせるようにしようとしています。

java.lang.NullPointerException: Attempt to invoke interface method 'void android.view.SurfaceHolder.unlockCanvasAndPost(android.graphics.Canvas)' on a null object reference 

そのクラスのインスタンスがクラッシュ

+0

私はこの問題を理解しています。 しかし、私の問題は、この例外does notは、コードライン(クラッシュを引き起こすコード)がどこにあるのかを言う – TrW236

+0

あなたはそれをバックトレースし、そのclasのインスタンスを使用して確認する –

+0

だから私はそれをデバッグすることはできません..私は '私のコードからどこに問題があるのか​​知っています。 – TrW236

0

nullポインタとは何を取得するために作成された場所をバックトレースすることができますか?

nullpointerはJavaの非常に一般的な例外です。これは、開始されていないインスタンスへの呼び出しを試みるときに発生します。このことを考慮:。

Canvas c; 
c.drawRect(...); 

これは基本的にあなたがやっていることです。あなたのコードは異なる場合があります(と関連するスレッドが、おそらくそこにある

あなたがロックを解除する前に、あなたはキャンバスをロックする必要がポストすべてかかわらず、このように:。。

Canvas canvas = sf.lockCanvas(); 

キャンバス自体言うと、SFはSurfaceViewであります。SurfaceViewは、任意のビュー(ビュー、SUrfaceView、など)と交換することができる。

をですから、上記の行を追加した場合、あなたはキャンバスを参照し、nullでないことになりますと、例外が


を解決します

変更この:この

screen = holder.lockCanvas(); 
+0

ご存知ですか,,アニメーションスレッドでこのNullPointerExceptionがスローされたときに、どのようにしてアンドロイドスタジオでブレークポイントを設定できますか? – TrW236

+0

サイドを右クリックし、 "show numbers"(< - OPTIONAL。どこを押すかを知るために使用します)を押してから、ブレークポイントを追加する行を左クリックします。 – Zoe

+0

このNullPointerExceptionの疑いがあると思われるコードをアップロードしました – TrW236

関連する問題