2012-01-13 4 views
0

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

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

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 

)

+1

Что говорит ваш LogCat об ошибке? – Blundell

+0

Его теперь в описании. Кажется, что прикосновение уже работает, но объекты еще не загружаются. mhh:/ – user1119607

+0

Было бы неплохо увидеть фрагмент кода. –

ответ

0

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

Scene.java, линия 112 в методе AddChild()

0

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

0

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

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

Смежные вопросы