gpt4 book ai didi

Java:不可能的 NullPointerException 怎么还会发生?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:37:30 24 4
gpt4 key购买 nike

我刚刚收到我们软件的以下错误报告:

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 设置等。

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

关于Java:不可能的 NullPointerException 怎么还会发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26866759/

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