【问题标题】:Absolute/relative path in java (jar, ide)java中的绝对/相对路径(jar,ide)
【发布时间】:2013-08-22 11:53:24
【问题描述】:

我的程序使用 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/

【问题讨论】:

  • 尝试将其用作资源:link

标签: java path embedded-resource


【解决方案1】:

下面是the javadoc 对 ImageIcon 的构造函数的评价:

从指定的文件创建一个 ImageIcon。图像将通过 MediaTracker 进行预加载,以监控图像的加载状态。指定的字符串可以是文件名文件路径

(强调我的)

您的图像未存储在文件中。它不在您的文件系统中。它在一个本身在类路径中的 jar 中。这就是您要从中加载它的地方。无论您的应用程序的 jar 文件在最终用户的机器上的何处,您的程序都希望从该 jar 文件中加载它。并且这个 jar 文件中的所有资源都可以从 ClassLoader 中获得。

所以你应该使用

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

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

【讨论】:

  • 不确定,但我认为您也应该在第二条路径的开头添加/
  • 我说Tell me how to properly set the path to work in the IDE (Intellij IDEA) and in the archive. 如果我使用 .getResource,那么我无法在 IDE(IDEA) 中运行我的应用程序,它会抛出异常:NullPointerException
  • @ArnaudDenoyelle:我确定它不需要。
  • @Eldar:这意味着res 目录不在您的源目录下,它应该在哪里。一旦它在那里,IDEA 将通过将图像与 .class 文件一起复制到输出目录来“编译”图像,因此它们将成为类路径的一部分。
  • 在您发表评论后,我将res 移至Shooter2Dv22082013 目录。现在它编译正确并且在 IDEA 中运行良好。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2011-02-05
相关资源
最近更新 更多