2012-04-24 94 views
0

每當我關閉應用程序時發生錯誤。我不知道爲什麼?它只發生在2.3.7上。 一切工作罰款3.2和4Android - GLSurface,關閉時出錯

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at android.opengl.GLSurfaceView.onDetachedFromWindow(GLSurfaceView.java:533) 
at android.view.View.dispatchDetachedFromWindow(View.java:6190) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1162) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1162) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1162) 
at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1751) 
at android.view.ViewRoot.doDie(ViewRoot.java:2766) 
at android.view.ViewRoot.die(ViewRoot.java:2736) 
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:218) 
at android.view.Window$LocalWindowManager.removeViewImmediate(Window.java:477) 
atandroid.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2822) 
at android.app.ActivityThread.access$2100(ActivityThread.java:123) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:972) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3835) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
at dalvik.system.NativeStart.main(Native Method) 

回答

2

可能這個副本:GLSurfaceView.onDetachedFromWindow

是遊戲實際工作和運行,當你關閉該窗口?在另一個問題聽起來像他們從來沒有附加渲染,但我不知道你的情況是否如此。

0
Because on 2.3 the GLSurfaceView.onDetachedFromWindow method didn't do nullpointer protection;However this method did nullpointer protection on other version above 2.3. 

protected void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    mGLThread.requestExitAndWait(); 
} 

the solution is that set a render for your GLSurfaceView object like below: 
mGLSurfaceView.setRenderer(new MyRenderer()); 

mGLThread is init in setRenderer() method;the code is below: 

    public void setRenderer(Renderer renderer) { 
     checkRenderThreadState(); 
     if (mEGLConfigChooser == null) { 
      mEGLConfigChooser = new SimpleEGLConfigChooser(true); 
     } 
     if (mEGLContextFactory == null) { 
      mEGLContextFactory = new DefaultContextFactory(); 
     } 
     if (mEGLWindowSurfaceFactory == null) { 
      mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory(); 
     } 
     mRenderer = renderer; 
     mGLThread = new GLThread(mThisWeakRef); 
     mGLThread.start(); 
    } 
so if you have set a renderer on 2.3,you would not met the nullpointer exception;Hope this could help you.