关于NullPointerException,是使用null调用方法,从而导致程序异常。
起因:
在学习xml的解析时,需要用到xml的文件进行加载。在使用到class的加载资源,XmlDataSource.class.getClassLoader().getResource()时,结果出现了NullPointerException。
代码如下:
package com.dvy.mgallery;
public class XmlDataSource {
static {
String dataFile = XmlDataSource.class.getClassLoader().getResource("/painting.xml").getPath();
System.out.println(dataFile);
}
public static void main(String[] args) {
new XmlDataSource();
}
}
报错:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at com.imooc.mgallery.XmlDataSource.<clinit>(XmlDataSource.java:5)
问题探索
出现空指针异常在互联网上搜索了一番,也未找到问题究竟出在哪里,最多能晓得是NULL这个关键点。
究竟为什么NULL这儿出错,真不知道原因:方法代码写错了?这个可能存在,如果这个没错,那又是哪儿出错了?
经过进一步摸索,此行代码入参只有”/painting.xml”,所以导致问题的根本原因是这个文件未找到。
于是将paintng.xml这个换成完整的绝对路径仍不行。经过一番折腾,最后终于找到了解决方法。
解决方法
通过分析,得出NullPointerException错误是XmlDataSource.java:5,如果语句没有语法错误,那一定是参数(资源路径问题)。
最终解决方法:
设置resource目录,直接将painting.xml放到resouce目录里。OK,问题解决。
举一反三:
Java中若出现NullPointerException,就去找导致NULL的那个原因,错误提示只提示到是哪一行,具体怎么解决根据实际去分析NULL是哪个地方,资源的话就去找资源路径原因,其他传参的话,就去找参数相关的问题。当然这一切要保证代码无误的前提下,一般情况下代码自身出问题的情况相对少一些。
题外:
String dataFile = XmlDataSource.class.getResource("painting.xml").getPath(); // 某网将代码写成这样,不带有getClassLoader竟然也能执行。暂不去研究这东东什么原因,在我这儿却无法通过。
参考: