ошибка после закрытия приложения

у меня есть средство визуализации glsurfaceview с некоторым кодом, который позволяет мне возобновить работу после нажатия кнопки «Домой» и повторного входа в игру, и это работает нормально, но если я закрою игру с помощью кнопки возврата и попытаюсь снова войти в игру, она вылетает. и закрыть. Я пробовал писать Finish() на OnDestroy, но не работал. я уже проверил, что onDestroy() выполняет его, когда я нажимаю кнопку возврата. в onSurfaceCreated у меня есть функции, которые загружают текстуры и устанавливают вершины для рисования этих текстур, но я не понимаю, что может происходить

редактировать:

это лог после того, как я запустил игру во второй раз, закрыв ее до этого

05-08 20:30:41.069: I/GLThread(6272): noticed surfaceView surface lost tid=12
05-08 20:30:41.069: I/GLThread(6272): onResume tid=12
05-08 20:30:41.169: I/GLThread(6272): noticed surfaceView surface acquired tid=12
05-08 20:30:41.169: W/EglHelper(6272): start() tid=12
05-08 20:30:41.219: W/EglHelper(6272): createContext com.google.android.gles_jni.EGLContextImpl@4056d398 tid=12
05-08 20:30:41.219: I/GLThread(6272): noticing that we want render notification tid=12
05-08 20:30:41.219: W/GLThread(6272): egl createSurface
05-08 20:30:41.219: W/EglHelper(6272): createSurface()  tid=12
05-08 20:30:41.219: W/GLThread(6272): onSurfaceCreated
05-08 20:30:41.219: W/GLThread(6272): onSurfaceChanged(480, 320)
05-08 20:30:41.379: W/EglHelper(6272): destroySurface()  tid=12
05-08 20:30:41.389: W/EglHelper(6272): finish() tid=12
05-08 20:30:41.389: W/dalvikvm(6272): threadid=9: thread exiting with uncaught exception (group=0x40018578)
05-08 20:30:41.389: E/AndroidRuntime(6272): FATAL EXCEPTION: GLThread 12
05-08 20:30:41.389: E/AndroidRuntime(6272): java.lang.NullPointerException
05-08 20:30:41.389: E/AndroidRuntime(6272):     at glfg.gl.render.setverticesSquare(render.java:180)
05-08 20:30:41.389: E/AndroidRuntime(6272):     at glfg.gl.render.onSurfaceChanged(render.java:475)
05-08 20:30:41.389: E/AndroidRuntime(6272):     at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1381)
05-08 20:30:41.389: E/AndroidRuntime(6272):     at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1138)
05-08 20:30:41.399: I/GLThread(6272): onPause tid=12

если я убью процесс, я могу войти снова без проблем, но если я выйду с помощью кнопки возврата, он вылетает, когда я пытаюсь запустить его снова, предполагается, что приложение будет полностью закрыто, но кажется, что нет


person Jose    schedule 09.05.2012    source источник
comment
Никто другой тоже не поймет, что может происходить, если вы не включите дамп стека из системного журнала. Опять же, если вы сначала изучите его, вы можете понять проблему, но если нет, отредактируйте свой пост, чтобы включить его, чтобы кто-то мог помочь.   -  person mah    schedule 09.05.2012


Ответы (1)


Ваша ошибка здесь:

05-08 20:30:41.389: E/AndroidRuntime(6272): java.lang.NullPointerException
05-08 20:30:41.389: E/AndroidRuntime(6272):     at glfg.gl.render.setverticesSquare(render.java:180)

В glfg.gl.render.setverticesSquare в строке 180. Это часть вашего кода? Я бы посмотрел на эту строку и увидел, какие объекты могут быть нулевыми, или, предпочтительно, использовал бы точки останова для ее проверки.

person Tim    schedule 09.05.2012
comment
ies render.setverticesSquare вызывается в onSurfaceChanged, но нет ничего, что могло бы вызвать ошибку, нет нулевых ссылок, потому что, когда onSurfaceChanged сначала я устанавливаю все значения равными нулю, затем вызываю функции, которые устанавливают вершинные буферы и текстуры, все это для может возобновить игру при нажатии кнопки домой - person Jose; 09.05.2012
comment
я очень хорошо видел строку 180, и я увидел, что было ошибкой, было условное выражение, которое, если оно ложно, инициализировало некоторые массивы, после чего это изменилось на истину, у меня есть переменная, оцененная в условном выражении как: public static логическое условное = ложь; поэтому я предполагаю, что статические переменные сохраняют свои значения, несмотря на то, что приложение было закрыто. - person Jose; 09.05.2012