2017-04-14 5 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) 

Sur l'interface « fond d'écran de jeu », j'ai tourné l'écran et le dessin (dessin papier peint en direct) redémarré, et l'application écrasé (pas toujours écrasé), et l'esquisse (live wallpaper) a continué à courir sur le fond ..Android en direct wallpaer écrasé (NullPointerException, toile est un objet nul) mais je ne peux pas trouver où

Quelqu'un pourrait-il me donner un indice? Merci d'avance.


Le code source, que j'ai trouvé dans processing.a2d.PGraphicsAndroid2D.endDraw()

de 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(); 
    } 

Le code ci-dessus peut provoquer ce NullPointerException.


Je n'ai pas ce problème maintenant, parce que je mettre à jour la nouvelle version de traitement library..And le code ci-dessus est de la nouvelle version du lib. (Je ne peux pas voir le code de l'ancienne version)

+0

Comment puis-je mettre en studio android point d'arrêt, lorsque ce NullPointerException dans cette discussion d'animation est jeté? – TrW236

+0

Je n'ai pas ce problème maintenant, parce que je mets à jour la nouvelle version de la bibliothèque de traitement .. – TrW236

Répondre

0

Le problème est clair que vous pointez une référence d'objet null qui est l'instance de 'void android.view.SurfaceHolder.unlockCanvasAndPost(android.graphics.Canvas)' n'a pas été créé mais que vous essayez de l'obtenir donc c'est une erreur de lancement.

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

vous pouvez BACKTRACE où l'instance de cette classe est créée pour obtenir le crash

+0

Je comprends ce problème. Mais mon problème est, cette exception ne dit pas où est la ligne de code (le code qui provoque l'accident) – TrW236

+0

vous le retournez et vérifiez où vous utilisez l'instance de ce clas –

+0

Donc je ne peux pas le déboguer .. parce que je ne ' Je sais où de mon code a un problème .. – TrW236

0

Qu'est-ce qu'un nullpointer?

Un nullpointer est une exception très courante en Java. Cela se produit lorsque vous essayez d'appeler une instance qui n'a pas été initiée. Considère ceci:.

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

C'est essentiellement ce que vous faites. ALl si votre code peut être différent (et il y a probablement un fil impliqué

Avant de déverrouiller et après vous devez verrouiller la toile comme ceci:..

Canvas canvas = sf.lockCanvas(); 

toile elle-même dit, et sf est SurfaceView . SurfaceView peut être remplacé par une vue (vue, SUrfaceView, etc.).

donc, si vous ajoutez la ligne ci-dessus, vous ferez la toile est une référence et non nulle, et l'exception sera résolu


Modifier ceci:

screen = holder.lockCanvas(null); 

à cette

screen = holder.lockCanvas(); 
+0

Savez-vous ,, Comment est-ce que je peux placer le point d'arrêt dans le studio androïde, quand cette exception NullPointerException dans le fil d'animation est levée? – TrW236

+0

Faites un clic droit sur le côté et appuyez sur "Afficher les numéros" (<- FACULTATIF) Utilisé pour savoir où appuyer (point de référence).) Puis vous faites un clic gauche sur la ligne à laquelle vous voulez ajouter un point d'arrêt. – Zoe

+0

J'ai téléchargé le code, que je pense est suspect pour cette NullPointerException – TrW236