0

我制作了一个使用多个图像的应用程序。我有 2 种方法来运行我的应用程序:
- 按下run想法
- 制作一个胖 jar 文件并从控制台运行它java -jar app.jar

如果我想从中运行它,Idea我必须使用:

BufferedImage backgroundImage = ImageIO.read(new File("res/field.png"));

代替

BufferedImage backgroundImage = ImageIO.read(getClass().getClassLoader().getResource("res/field.png"));
<- 这就是我必须在 jar 文件案例中使用的内容

为什么?我以为他们差不多。我的情况有什么通用的方法吗?

4

2 回答 2

2

我总是使用:

BufferedImage backgroundImage = ImageIO.read(getClass().getResource("res/field.png"));

它适用于 IDE 和 jar 内部。.getResource(...) 返回一个 URL,jar:// 或 file://

请注意,路径要么以 / 开头(在这种情况下,它是相对于包根目录),要么是相对于类包 - 如果你的类是 com.example.Test,/res/则指文件夹 com/example/测试/res/。

您甚至可以使用静态版本 - YourClassName.class.getResource(...) 它允许您轻松访问包树的其他“分支”(您可以使用来自位于不同分支中的类的引用)

于 2012-11-05T11:35:09.607 回答
1

使用java.io,相对路径取决于当前工作目录。使用 getResource,您必须在classpath.

于 2012-11-05T11:31:29.437 回答