Android java.lang.IllegalArgumentException
这可能是一个简单的答案,但我似乎不能得到正确的答案,我想我会问。 我得到一个java.lang.IllegalArgumentException和一个java.lang.NullPointerException 这是错误日志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
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(),而您还没有机会解锁上一个画布,则代码中可能会出现这种情况