gpt4 book ai didi

java - NullPointerExceptions 仅在某些 Samsung Galaxy 设备上出现?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:49 26 4
gpt4 key购买 nike

我正在使用 LibGDX。当我的应用程序启动时,它会创建一个屏幕。加载屏幕时,它会调用静态函数 Module.createStyles()

此函数创建了一系列将在应用程序的其余部分使用的样式(内置的 LibGDX 样式,如 WindowStyle、LabelStyle、TextButtonStyle - 所有用于创建用户界面对象的类型)。

屏幕完成后,它会调用 Module.disposeStyles()

无论如何,根据我的 Google Analytics 崩溃报告,我在尝试创建一个带有 Module.dialogStyle 的对话框时随机得到一个 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)

绝对没有理由 Module.dialogStyle 应该为 null。我将此字段设置为 null 的唯一地方是 Module.disposeStyles() 并且此函数仅在应用程序的一个特定位置(最后)调用。

尽管 95% 的用户从未遇到过,但我会假设这是我代码中的一个错误。然而,所有 5% 的体验者似乎都是 Galaxy 用户,我不确定这是否是巧合:

  • 银河 S4
  • 银河 S3
  • GALAXY Tab 3 精简版

有人有什么想法吗? Galaxy 设备没有内置 RAM 管理器吗?跟这个有关系吗?

最佳答案

我假设:

Module.dialogStyle

是对 Module 类的 static 属性的引用。

您可能遇到了 Android 如何管理 JVM 生命周期的副作用。在某些情况下(尤其是在更大的设备上),JVM 实例将被重新使用,这可能会导致问题(例如,静态初始化程序已经运行,并且不会重新运行)。或者,static 指针可能从您的应用程序的前一次运行到下一次运行,并且其中可能具有无效或不正确的状态。这取决于您的应用组织方式的细节。

如果您包含更多显示如何以及何时初始化静态字段的代码,我们或许可以弄清楚。

有关不同生命周期以及如何在本地复制它们的更多详细信息,请参阅: http://bitiotic.com/blog/2013/05/23/libgdx-and-android-application-lifecycle/

关于java - NullPointerExceptions 仅在某些 Samsung Galaxy 设备上出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25673309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com