0

アプリを閉じているときにエラーが発生するたび。どうしてか分かりません?2.3.7でのみ発生します。3.2と4ですべて正常に動作

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)
4

2 に答える 2

2

おそらくこれの複製:GLSurfaceView.onDetachedFromWindow

ウィンドウを閉じると、ゲームは実際に機能して実行されていますか?他の質問では、レンダラーが接続されていないように聞こえますが、それがあなたの場合に当てはまるかどうかはわかりません。

于 2012-04-24T16:12:46.443 に答える
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.
于 2015-01-14T07:00:25.223 に答える