【发布时间】:2019-10-09 05:29:03
【问题描述】:
我正在尝试加载存储在 /src/main/resources 文件夹中的图像。但是,当我这样做时,我不断遇到由于找不到资源而导致的 NullPointerException。
这里是sn-p的代码:
try {
String path = this.getClass().getClassLoader().getResource("bern.png").toString();
} catch (IOException ex) {
System.out.println(path);
}
这是我的项目文件树的图像:
这是我的目标构建文件树的图像:
这里是 NullPointerException 堆栈跟踪: https://pastebin.com/KqJVxWEL
我已经尝试很好地使用我能想到的图像文件的所有可能路径。 (/src/main/resources/bern.png、src/main/resources/bern.png、/bern.png 等)。
我也尝试过使用getClass().getClassLoader().getResource() 而不是getClass().getResource()。据我了解,getResource() 的Class 和ClassLoader 版本之间的唯一区别是Class 版本相对于根而言并非本质上是绝对的,而ClassLoader 版本是。
当我运行getClass().getResource("").toPath() 时,我得到了指向classes 目录的路径。这与我读到的有关使用目标构建文件树的getResource() 方法的内容一致。但是,我在目标构建中的任何地方都没有看到资源文件夹;我认为这是我问题的核心。我只是不确定如何解决它。
我知道这个问题之前已经被问过很多次了,但是这个问题的其他版本的答案对我没有多大帮助。
我使用的是 NetBeans 11,这个项目在 Maven 构建系统上运行。过去我没有用 Maven 做太多的工作,所以如果这个问题非常容易解决,请原谅我。
有人知道我是怎么处理这个错误的吗?
编辑:问题与我的项目结构或代码无关,如通过命令行使用mvn 运行时正确编译的代码所示。因此,这特别是 NetBeans 以及它查看资源文件夹的方式存在问题。
【问题讨论】:
-
@ElliottFrisch,不幸的是,
ClassLoader和Class方法仍然会导致 NullPointerException。 -
Re "a NullPointerException that stems from the resource not being found",贴出与你贴出的代码相匹配的堆栈跟踪。
-
@skomisa,添加了,虽然我不确定它说明了多少。
-
我在目标目录的任何地方都看不到
bern.png。