Android java.lang.IllegalArgumentException

Android java.lang.IllegalArgumentException,android,nullpointerexception,illegalargumentexception,Android,Nullpointerexception,Illegalargumentexception,这可能是一个简单的答案,但我似乎不能得到正确的答案,我想我会问。 我得到一个java.lang.IllegalArgumentException和一个java.lang.NullPointerException 这是错误日志 03-20 13:13:22.872: E/SurfaceTextureClient(565): dequeueBuffer failed (No such device) 03-20 13:13:22.879: E/BaseSurfaceHolder(565): Ex

这可能是一个简单的答案,但我似乎不能得到正确的答案,我想我会问。 我得到一个java.lang.IllegalArgumentException和一个java.lang.NullPointerException

这是错误日志

 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
在此方面的任何帮助都将不胜感激。
提前谢谢。

您正在将null传递给
SurfaceHolder.lockCanvas
。您希望改用无参数版本的
lockCanvas()
,前提是您没有要被视为脏的rect。

保存在
boolean
中,无论您的
Canvas
实例是否已锁定,以避免执行
unockanvasandpost()
方法,然后从以前的
lockCanvas()调用中解锁您的
Canvas

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;
        }
    }
}

感谢您消除了null异常,但在相同的两行代码中仍然存在java.lang.IllegalArgumentException错误。不确定是什么导致了这个错误,我应该提到的是,这只发生在安卓4和安卓4上,下面的任何事情都是好的,不会导致任何错误,只有安卓4和安卓4上,也许它与这个版本有关。是的,这是一个奇怪的问题,谢谢你解决了一半的问题,我很感激,如果我找到了答案,我会继续挖掘并发布,除非其他人对此问题有答案;对于java.lang.IllegalArgumentException错误。我想我会加上这一点。当画布被锁定并再次锁定(而没有解锁)时,就会发生这种情况。如果再次调用render(),而您还没有机会解锁上一个画布,则代码中可能会出现这种情况