通过Java代码更新XML文件时出错 19:45:37.624[main]错误c.s.s.z.c.w.r.MP-更新表时出错:MyFile,错误:java.lang.NullPointerException java.lang.NullPointerException:null 在java.util.Objects.requireNonNull(未知源代码)~[na:1.8.0\u 91] 在java.util.Arrays$ArrayList.(未知源代码)~[na:1.8.0\u 91] 在java.util.Arrays.asList(未知源代码)~[na:1.8.0_91] 在com.sl.sy.z.MU.getLM(MU.java:367)~[classes/:na] 在com.sl.sy.z.rr.MP.searchInP(MP.java:556)~[classes/:na] 在com.sl.sy.z.rr.MP.processR(MP.java:166)~[classes/:na] 在com.sl.sy.z.rr.RRMUpdate.processRR(RRMUpdate.java:139)[classes/:na] 位于com.sl.sy.z.rreeder.main(rreeder.java:101)[classes/:na]

通过Java代码更新XML文件时出错 19:45:37.624[main]错误c.s.s.z.c.w.r.MP-更新表时出错:MyFile,错误:java.lang.NullPointerException java.lang.NullPointerException:null 在java.util.Objects.requireNonNull(未知源代码)~[na:1.8.0\u 91] 在java.util.Arrays$ArrayList.(未知源代码)~[na:1.8.0\u 91] 在java.util.Arrays.asList(未知源代码)~[na:1.8.0_91] 在com.sl.sy.z.MU.getLM(MU.java:367)~[classes/:na] 在com.sl.sy.z.rr.MP.searchInP(MP.java:556)~[classes/:na] 在com.sl.sy.z.rr.MP.processR(MP.java:166)~[classes/:na] 在com.sl.sy.z.rr.RRMUpdate.processRR(RRMUpdate.java:139)[classes/:na] 位于com.sl.sy.z.rreeder.main(rreeder.java:101)[classes/:na],java,Java,这里是错误。请告诉我出现此错误的原因。此代码是安全的: 19:45:37.624 [main] ERROR c.s.s.z.c.w.r.MP - Error while updating table: MyFile, Error: java.lang.NullPointerException java.lang.NullPointerException: null at java.util.Objects.requireNonNull(Unknown Source) ~[na:1

这里是错误。请告诉我出现此错误的原因。

此代码是安全的:

19:45:37.624 [main] ERROR c.s.s.z.c.w.r.MP - Error while updating table:     MyFile, Error: java.lang.NullPointerException
java.lang.NullPointerException: null
    at java.util.Objects.requireNonNull(Unknown Source) ~[na:1.8.0_91]
    at java.util.Arrays$ArrayList.<init>(Unknown Source) ~[na:1.8.0_91]
    at java.util.Arrays.asList(Unknown Source) ~[na:1.8.0_91]
    at com.sl.sy.z.MU.getLM(MU.java:367) ~[classes/:na]
    at com.sl.sy.z.rr.MP.searchInP(MP.java:556) ~[classes/:na]
    at com.sl.sy.z.rr.MP.processR(MP.java:166) ~[classes/:na]
    at com.sl.sy.z.rr.RRMUpdate.processRR(RRMUpdate.java:139) [classes/:na]
    at com.sl.sy.z.RREReader.main(RREReader.java:101) [classes/:na]
List List=Arrays.asList(null,null);
但是,您似乎正在执行的代码不安全:

List<?> list = Arrays.asList(null, null);
List List=Arrays.asList(null);
原因是Arrays.asList是一个varargs方法。varargs序列只是数组的一种替代符号,因此,虽然实际定义是
asList(T…A)
,但该定义(几乎)相当于
asList(T[]A)
。如果传递多个参数,或者传递类型不是Object的单个参数,编译器知道Arrays类中没有其他方法可以匹配,因此它知道从这些多个参数隐式组合数组

但是单个
null
没有类型,因此只能推断为Object。空对象可以是任何类型,包括数组。编译器喜欢显式代码而不是自动调整的代码,并假设您正在尝试传递一个空数组,而不是编译器为了调用方法而智能地组合到数组中的空数组


最简单的解决方案是将Arrays.asList(null)替换为集合。singletonList(null)

谢谢您的解决方案。但我已经找到了上述问题的答案。 在我的例子中,它与我从中读取数据的Excel表有关。
分配用于从XML中读取单元格内容的变量没有得到数据更新,因为单元格数据不包含带逗号的值,而我是在一个条件下检查它的,即如果值包含逗号“,“

,并且绝对没有显示代码,这很难判断,但是看起来您正在调用
com.sl.sy.z.MU.getLM
(MU.java中的第367行)上的
Arrays.asList(null)
List<?> list = Arrays.asList(null);