getClassgetClassLoadergetResourceAsStream始终返回null,资源位于application.jar中

问题描述

我正在尝试用Java构建和运行桌面应用程序。它会尝试加载图像以用作JPanel的背景。

final ClassLoader classLoader = getClass().getClassLoader();
final InputStream backgroudImageStream = getClass().getClassLoader().getResourceAsStream("back.jpg");
if (backgroudImageStream != null) {
     final Image backgroundImage = javax.imageio.ImageIO.read(backgroudImageStream);
     // ...
} else {
     System.out.println("'back.jpg' resource not found");
}

我正在使用 IntelliJ IDEA 作为我的IDE。

“ back.jpg”文件存储在项目的'resources /'子目录中(或更确切地说是“ src / main / resources”)。此目录已正确标记为资源目录,允许文件中包含**。jpg文件(“资源模式”选项仅包含否定模式-在开头添加明确的?*.jpg模式无济于事)。

我已经检查了JAR文件,并且Application.jar在档案的主目录中确实有'back.jpg',因此构建系统正确地将其添加到JAR文件中。

我尝试过的以下组合都不起作用:

  • getClass().getClassLoader().getResourceAsStream("back.jpg")
  • getClass().getClassLoader().getResourceAsStream("resources/back.jpg")
  • getClass().getClassLoader().getResourceAsStream("/src/main/resources/back.jpg")
  • getClass().getResourceAsStream("back.jpg")
  • getClass().getResourceAsStream("resources/back.jpg")
  • getClass().getResourceAsStream("/src/main/resources/back.jpg")

在尝试调试它时,我注意到在尝试查找资源时Java不在列表中包含Application.jar。如何在IntelliJ IDEA中进行更改?

到目前为止,我已经阅读了许多有关该主题的问题,但是没有一个问题解决了我的问题。


该应用程序的IML文件包括以下几行:

    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>

解决方案:(遵循注释中的Svirin's answer路径)

应用程序是使用Application(或更确切地说是Application / Start)配置来构建的,可以在 Run / Debug Configurations (运行/调试配置)窗口中(使用打开)进行检查>构建选择按钮的“编辑配置”

如果通过Application运行它,则需要手动将resources目录添加到类路径中。转到项目设置->模块->选择您的模块,在依赖项选项卡上,单击加(+)-> Jar或目录->选择图片的目录->选择作为类

这会将以下行添加到IML文件

    <orderEntry type="module-library">
      <library>
        <CLASSES>
          <root url="file://$MODULE_DIR$/src/main/resources" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)