问题描述
我正在尝试用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 (将#修改为@)