加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:如何仍然发生不可能的NullPointerException?

发布时间:2020-12-15 00:34:03 所属栏目:Java 来源:网络整理
导读:我刚收到以下关于我们软件的错误报告: java.lang.NullPointerException at java.util.Arrays.equals(Unknown Source) at our.app.OurMain(OurMain.java:13) 这种情况发生在Windows上的JRE 1.7.0_45上,对应的源代码是Arrays.equals: public static boolean
我刚收到以下关于我们软件的错误报告:
java.lang.NullPointerException
    at java.util.Arrays.equals(Unknown Source)
    at our.app.OurMain(OurMain.java:13)

这种情况发生在Windows上的JRE 1.7.0_45上,对应的源代码是Arrays.equals:

public static boolean equals(byte[] a,byte[] a2) {
    if (a==a2)
        return true;
    if (a==null || a2==null)
        return false;

    int length = a.length;
    if (a2.length != length)
        return false;

    for (int i=0; i<length; i++)
        if (a[i] != a2[i])
            return false;

    return true;
}

调用代码是:

final byte[] b1 = ... // populate array
final byte[] b2 = ... // populate array
final boolean equal = Arrays.equals(b1,b2);

显然没有办法在这里引发NullPointerException.它怎么还能发生?错误报告可以被认为是值得信赖的.

解决方法

这不是一个答案,但因为评论太长了……

尚未提出的一个问题是:问题什么时候开始出现?经过特定的软件更新或突然出现?您可能无法追踪它最初发生时的确切日期,但是如果它可以与时间相关联,那么您作为软件提供的任何内容都可能会发生更改(例如,您是否捆绑了JRE?)导致问题.然后,您将有条不紊地将已知的错误前版本与第一个错误清单发布之间的更改进行区分.

如果它突然出现,最有可能的问题来源(据我所知,你所披露的内容)隐藏在软件执行环境的某个地方(可能不在你的直接控制之下).它可能是JRE本身,相关的库或系统服务,甚至可能是硬件和软件的特定组合(信不信由你,有时显然甚至工作站的BIOS都会产生巨大的影响:https://www.daniweb.com/hardware-and-software/microsoft-windows/windows-vista-and-windows-7-8/threads/271699).

为了提高实际解决问题原因的机会,您需要收集错误实际出现的环境的信息,并尽可能地(至少JRE版本,32/64位,操作系统;最好安装补丁,CPU型号;最好包括掩模设置修订版,主板型号;最好包括BIOS版本和主板版本).不要忘记确切的版本或导致问题的软件.如果您的用户群具有非常同质的环境(例如,在大型公司中只购买了几个工作站型号,可能全部来自同一供应商),那么与用户群非常异质(例如,许多独立客户使用)相比,这些小细节更有意义.完全不同的配置).

给定足够的数据模式应该出现(所有错误报告都有共同点,例如特定的JRE;或者一组JRE版本,特定的工作站模型等).

如果可能,您的用户可以与您合作(故意改变遇到问题的机器/用户的环境)来测试候选人.这可能涉及安装JDK以获取更多错误上下文,更改VM设置等.

只是粗略的轮廓,但如果没有快速解决方案出现,从长远来看,有条理的方法最有可能产生解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读