java中的绝对/相对路径(jar,ide)

时间:2013-08-22 11:53:25

标签: java path embedded-resource

我的程序使用Image.class,这可以帮助我接收图像。

Image img = new ImageIcon("Shooter2D/res/background.jpg").getImage();

当程序从开发环境运行时 - 编译jar文件后一切正常 - 不起作用。 告诉我如何正确设置在IDE(Intellij IDEA)和存档中工作的路径。 Shooter2D.jar包含:

- META-INF
Manifest-Version: 1.0
Main-Class: Shooter2Dv22082013.Main
- res
all pictures
- Shooter2Dv22082013
all .class files, main is Main.class

指示性数字:http://imageshack.us/photo/my-images/801/eyjv.png/

1 个答案:

答案 0 :(得分:3)

以下是关于ImageIcon构造函数的the javadoc所说的内容:

  

从指定的文件创建ImageIcon。将使用MediaTracker预先加载图像以监控图像的加载状态。指定的字符串可以是文件名文件路径

(强调我的)

您的图片未存储在文件中。它不在您的文件系统中。它位于一个jar中,它本身就在classpath中。这就是你要加载它的地方。无论您的应用程序的jar文件位于最终用户的计算机上,您的程序都希望从此jar文件加载它。此jar文件中的所有资源都可以从ClassLoader获得。

所以你应该使用

new ImageIcon(MyClass.class.getResource("/res/background.jpg"))

new ImageIcon(MyClass.class.getClassLoader().getResource("res/background.jpg"))