我在布局中运行了一个3D应用程序(min3D框架)。布局包含一些控制游戏的按钮。这很好用。但是布局看起来比游戏本身更快,当我触摸应用程序加载的区域时,它会崩溃。如果我等待,不要触摸该区域,我没有错误。一切都很好。 我怎样才能解决这个问题?
我现在知道应用程序正在崩溃,它应该添加一个尚未加载的对象。它全部在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
)
答案 0 :(得分:0)
只应在加载对象后启用/添加触摸侦听器。使用该时间可能会显示加载对话框/等待屏幕。您的logcat解释了它的NullPointerException
Scene.java,addChild()方法中的第112行
答案 1 :(得分:0)
com.appboss.soyuz.Rocket.onTouchEvent(Rocket.java:250)这是你的罪魁祸首。您可以在应用程序完全加载之前捕获它 - 创建一个标志isCreated(isLoaded)或者其他。在向用户提供控件之前,您是否有加载屏幕?
答案 2 :(得分:0)
为什么不尝试使用AsyncTask在后台加载游戏并弹出“请等待游戏加载”对话框,该对话框将在Asynctask的doInBackground()结束时被解雇?
这是我所知道的最好的解决方法,但它假设你不介意一个小的加载对话框。