IllegalArgumentException SurfaceView allready locked

Jaiel

Jaiel

Dauergast
235
ich kriege heute mir ncihts dir ncihts eine fehlermeldung die ich zuvor nciht bekommen habe:




PHP:
04-10 12:44:33.361: E/SurfaceHolder(14537): Exception locking surface
04-10 12:44:33.361: E/SurfaceHolder(14537): java.lang.IllegalArgumentException: Surface was already locked
04-10 12:44:33.361: E/SurfaceHolder(14537): 	at android.view.Surface.lockCanvas(Surface.java:264)
04-10 12:44:33.361: E/SurfaceHolder(14537): 	at android.view.SurfaceView$4.internalLockCanvas(SurfaceView.java:909)
04-10 12:44:33.361: E/SurfaceHolder(14537): 	at android.view.SurfaceView$4.lockCanvas(SurfaceView.java:877)
04-10 12:44:33.361: E/SurfaceHolder(14537): 	at de.jaielsoft.surfaceviews.MainView.doDraw(MainView.java:585)
04-10 12:44:33.361: E/SurfaceHolder(14537): 	at de.jaielsoft.threads.MainThread.run(MainThread.java:137)


hier der code ich habe zeile 585 markiert
zeile 137 im thread ruft einfach nur diesen code auf:

PHP:
public void doDraw()
	{
		if(!surfaceReady)return;
		synchronized(sHolder)
		{
		    try
		    {
                canvas = sHolder.lockCanvas();//Das ist zeile 585 weswegen der Fehler kommt
			    mThread.drawOnCanvas(canvas,true);
		    }
		    catch(Throwable t)
		    {
		        canvas=null;
		    }
		    finally
		    {
			    if(canvas!= null)
			    {
				sHolder.unlockCanvasAndPost(canvas);
			    }
            }
	     }
	}

Manchmal lässt sich der Fehler nciht reproduzieren manchmal kommt er unverhofft manchmal auch nciht

ist erst seit heute so

Ich habe zwar ein paar Veränderungen gemacht aber keine die die Art und weise wie ich zeichne betreffen oder wann ich locke

ich synchronisiere sogar den sHolder genau wegen sowas wie kann der fehler dann auftreten?

kann es was mit android 5 zu tun haben?


Ich verstehe wirklich nciht wieso das alles jetzt auf einmal kommt!!!

Der ursprüngliche Beitrag von 13:05 Uhr wurde um 13:27 Uhr ergänzt:

EDIT: Ok ich hab etwas ganz Dummes vergessen. Ich hab aus bequemlichkeit einem Button noch gar kein String zu gewiesen der war auf Null ich hab das irgednwie vergessen omg obwohl ich von dem Fehler wusste

hab grad mein Code min. 10 mal durchgehabt bis mir es wieder eingefallen ist
der Fehler kam nur von dem Surfacelock weil da auch die draw methode drin ist es war aber in Wirklichkeit eine NullPointerException!!!
(Da sieht man mal was passiert wenn man einfach alles mit throwable abfängt und dann auch noch versucht wieder zu locken udn wieder und wieder ohne zu entlocken...)



Ich habe den Try Catch block jetzt verändert:

PHP:
synchronized(sHolder)
		{
			try
			{			
				canvas = sHolder.lockCanvas();
				mThread.drawOnCanvas(canvas,true);
			}
			catch(Throwable t)
			{
				sHolder.unlockCanvasAndPost(canvas);
				canvas=null;
			}
			finally
			{
				if(canvas!= null)
				{
					sHolder.unlockCanvasAndPost(canvas);
				}
			}
		}
 
Zuletzt bearbeitet:
Das ist jetzt aber ja auch doof. Wenn jetzt in lockCanvas eine Exception kommt und canvas noch null ist wird in deinem catch doch eine NullPointerException durch unlockCanvas geworfen, oder?

Ich würde das unlock nur im finally machen und im catch nur eine Behandlung für die Exceptions selbst, aber canvas nicht null setzen. Weiterhin würde ich canvas nach sholder.unlockCanvas null setzen.
 
ach sorry habe ich nciht dazu geschrieben ich setze vor jedem lock den canvas auf null

hier ein anderer Vorschlag :

PHP:
        canvas=null;
        synchronized(sHolder) 
        { 
            try 
            {             
                canvas = sHolder.lockCanvas(); 
                mThread.drawOnCanvas(canvas,true); 
                locked=true;
            } 
            catch(Throwable t) 
            { 
                locked=false;
            } 
            finally 
            { 
                if(canvas!= null&&locked) 
                { 
                    sHolder.unlockCanvasAndPost(canvas); 
                    locked=!locked;
                } 
            } 
        }


und naja vllt wäre ein spezieller catchblock mit IllegalArgumentException wohl besser
 

Ähnliche Themen

A
Antworten
4
Aufrufe
1.543
jogimuc
J
H
Antworten
3
Aufrufe
1.179
swa00
swa00
A
Antworten
1
Aufrufe
1.038
swa00
swa00
Zurück
Oben Unten