我正在尝试加载存储在/ src / main / resources文件夹中的图像。但是,当我这样做时,我会遇到由于找不到资源而导致的NullPointerException。
这是代码段:
config/database.php
?
这是我的项目文件树的图像:
这是目标构建文件树的图像:
这是NullPointerException堆栈跟踪: https://pastebin.com/KqJVxWEL
我已经尝试过很好地使用我能想到的图像文件的所有可能路径。 (/src/main/resources/bern.png、src/main/resources/bern.png、/bern.png等)。
我还尝试使用config/database.php
代替 try {
String path = this.getClass().getClassLoader().getResource("bern.png").toString();
} catch (IOException ex) {
System.out.println(path);
}
。据我了解,getClass().getClassLoader().getResource()
的{{1}}和getClass().getResource()
版本之间的唯一区别在于,Class
版本相对于根并不是固有的绝对值,而{{ 1}}版本是。
当我运行ClassLoader
时,会得到指向getResource()
目录的路径。这与我所读过的关于Class
与目标构建文件树一起使用的方法的内容一致。但是,我没有看到资源文件夹显示在目标版本中的任何位置。我认为这是我问题的核心。我只是不确定如何解决它。
我知道这个问题以前曾被问过无数次,但是对这个问题的其他版本的回答并没有帮助我很多。
我正在使用NetBeans 11,并且该项目正在Maven构建系统上运行。过去我在Maven方面没有做太多工作,所以如果这个问题非常容易解决,请原谅我。
有人知道我要如何解决这个错误?
编辑:问题不在于我的项目结构或代码,如通过命令行使用ClassLoader
运行时正确编译的代码所示。结果,这特别是NetBeans的问题以及它查看资源文件夹的方式。
答案 0 :(得分:0)
以流(而不是URL或文件路径)的形式读取资源内容
public static void main(String[] args) throws IOException {
InputStream in = Application.class.getClassLoader().getResourceAsStream("bern.png");
BufferedImage testImage = ImageIO.read(in);
ImageIcon icon = new ImageIcon(testImage);
}