我制作了一个使用多张图片的应用程序。我有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文件中使用的
为什么呢?我以为他们差不多了。对我的案子有什么通用方法吗?
答案 0 :(得分:2)
我总是使用:
BufferedImage backgroundImage = ImageIO.read(getClass().getResource("res/field.png"));
既可以在IDE中运行,也可以在jar内部运行。 .getResource(...)返回一个URL,jar://或file://
请注意,路径要么以/开头(在这种情况下它是相对于包根),要么它是相对于类包的 - 如果你的类是com.example.Test,/res/
指的是文件夹com / example / Test / res /.
您甚至可以使用静态版本 - YourClassName.class.getResource(...),它可以让您轻松到达其他"分支"您的包树(您可以使用引用来自位于不同分支的类)
答案 1 :(得分:1)
使用java.io
时,相对路径取决于当前工作目录。
使用getResource,您必须在classpath
中拥有该资源。