欢迎光临
我们一直在努力

xx.class.getResource 空指针异常 Exception in thread “main” java.lang.NullPointerException

关于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竟然也能执行。暂不去研究这东东什么原因,在我这儿却无法通过。

参考:

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » xx.class.getResource 空指针异常 Exception in thread “main” java.lang.NullPointerException

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址