Приложение Android падает при загрузке - PullRequest
0 голосов
/ 14 января 2012

Я сделал 3d-приложение (min3D framework), которое работает внутри макета.Макет содержит несколько кнопок для управления игрой.Это отлично работает.Но раскладка выглядит быстрее, чем сама игра, и когда я касаюсь области, в которой загружается приложение, она падает.Если я жду и не касаюсь области, я не получаю ошибок.Все работает хорошо тогда.Как я могу это исправить?

Теперь я знаю, что приложение падает в тот момент, когда оно должно добавить объект, который еще не загружен.Все это в функции onTouchEvent.Но почему это работает, пока initScene не завершил работу?

logCat:

01-13 21:17:20.476: E/AndroidRuntime(20189): FATAL EXCEPTION: main
01-13 21:17:20.476: E/AndroidRuntime(20189): java.lang.NullPointerException
01-13 21:17:20.476: E/AndroidRuntime(20189):    at com.appboss.min3d.core.Scene.addChild(Scene.java:112)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at com.appboss.soyuz.Rocket.onTouchEvent(Rocket.java:250)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at android.app.Activity.dispatchTouchEvent(Activity.java:2231)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1795)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2336)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1976)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at android.os.Looper.loop(Looper.java:150)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at android.app.ActivityThread.main(ActivityThread.java:4277)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at java.lang.reflect.Method.invokeNative(Native Method)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at java.lang.reflect.Method.invoke(Method.java:507)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 21:17:20.476: E/AndroidRuntime(20189):    at dalvik.system.NativeStart.main(Native Method

)

Ответы [ 3 ]

0 голосов
/ 14 января 2012

com.appboss.soyuz.Rocket.onTouchEvent (Rocket.java:250) это ваш преступник.Вы можете поймать его до полной загрузки приложения - сделать флаг isCreated (isLoaded) или другое.Есть ли у вас экран загрузки перед тем, как передать управление пользователю?

0 голосов
/ 14 января 2012

Почему бы не попробовать использовать AsyncTask для загрузки игры в фоновом режиме и открыть диалоговое окно «Пожалуйста, подождите, пока игра загрузится», которое будет закрыто в конце doInBackground () Asynctask?

Это лучший обходной путь, который я знаю, но он предполагает, что вы не против небольшого диалогового окна загрузки.

0 голосов
/ 14 января 2012

Вы должны включать / добавлять сенсорный прослушиватель только после загрузки объектов. До этого времени возможно показывать диалог загрузки / экран ожидания. Ваш logcat объясняет свое исключение NullPointerException

Scene.java, строка 112 в методе addChild ()

...