1

我的 intellij 找不到本地 .png 图像。

private String craft = "craft.png";
ImageIcon ii = new ImageIcon(this.getClass().getResource(craft));

.png 与 java 文件位于同一目录中。我不明白为什么它不起作用。使用 maven 构建,尝试从资源交替到 java,但仍然没有运气:(

4

3 回答 3

3

craft.png必须放在src/main/resources中,否则不会按照 Maven 规则复制到 classpath 中。有关更多详细信息,请参阅此答案

您的代码也应更改为:

private String craft = "/craft.png";

这是示例工作项目

于 2013-09-03T21:38:10.153 回答
1

转到您的 IntelliJ 首选项并搜索“资源模式”(或直接转到“编译器”设置)。

IntelliJ 只会将某些资源复制到输出目录。确保资源模式包含 *.png。

我将资源模式设置为 !*.java (复制不是源文件的所有内容),这似乎工作正常(在我看来应该是默认设置)。

于 2013-09-03T21:29:22.857 回答
1

尝试从资源交替到 java

因此,起初您尝试将craft.png 放入src/main/resources. 那是它必须根据 Maven 放置的地方(不是在 src/main/java 中)。

但它不起作用,因为 this.getClass().getResource("craft.png")试图找到相对于this.class 的 package的“craft.png” 。如果您的this.class在包foo.bar中,那么您必须将craft.png放入src/main/resources/foo/bar/

您还可以使用前导斜杠在 getResource() 中提供绝对路径/。例如,将 craft.png 放入 resources 下的自定义文件夹中,并使用customFolder前面的src/main/resources/customFolder/斜杠读取它:/
this.getClass().getResource("/customFolder/craft.png")

如果您不在getResource()方法中使用前导斜杠,则内部类的包名称将附加到资源名称之前以使其绝对。此行为在Class.getResource()中进行了解释

于 2013-09-03T22:35:18.403 回答