FTL*_*lph 5 java android nullpointerexception galaxy libgdx
我正在使用LibGDX.当我的应用程序启动时,它会创建一个屏幕.加载屏幕时,它会调用静态函数Module.createStyles().
这个函数创建了一系列样式,这些样式将在整个应用程序的其余部分使用(内置的LibGDX样式,如WindowStyle,LabelStyle,TextButtonStyle - 用于创建用户界面对象的所有类型的东西).
屏幕完成后,它会调用Module.disposeStyles().
无论如何,根据我的Google Analytics崩溃报告,我在尝试使用Module.dialogStyle创建一个Dialog时会随机获取NullPointerException:
ExitDialog exitDialog = new ExitDialog("Are you sure?", Module.dialogStyle);
Thread: GLThread 2089, Exception: java.lang.IllegalArgumentException: style cannot be null.
at package.Window.setStyle(Window.java:181)
at package.Window.<init>(Window.java:63)
at package.Dialog.<init>(Dialog.java:65)
at package.ExitDialog$1.<init>(ExitDialog.java:38)
Run Code Online (Sandbox Code Playgroud)
Module.dialogStyle绝对没有理由应该为null.我将此字段置为空的唯一位置是Module.disposeStyles(),此函数仅在应用程序的一个特定位置(最后)调用.
我认为这是我的代码中的一个错误,尽管95%的用户从未体验过它.但是,所有5%的用户体验它似乎都是Galaxy用户,我不确定这是不是巧合:
有人有主意吗?Galaxy设备没有内置的RAM管理器吗?这会与此有关吗?
我假设:
Module.dialogStyle
Run Code Online (Sandbox Code Playgroud)
static是对属性的引用Module。
您可能会遇到 Android 管理 JVM 生命周期方式的副作用。在某些情况下(特别是在较大的设备上),JVM 实例将被重新使用,这可能会导致问题(例如,静态初始化程序已经运行,并且不会重新运行)。或者,static指针可能从应用程序的上一次运行一直存在到下一次运行中,并且其中的状态可能无效或不正确。这取决于您的应用程序的组织方式的细节。
如果您包含更多显示如何以及何时初始化静态字段的代码,我们也许可以弄清楚。
有关不同生命周期以及如何在本地重现它们的更多详细信息,请参阅: http ://bitiotic.com/blog/2013/05/23/libgdx-and-android-application-lifecycle/
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |