无法在导出的jar

时间:2016-03-28 19:33:20

标签: java eclipse jar export absolute-path

我已经在Stack Overflow上探讨了与此问题相关的每个解决方案,我遇到的解决方案只在我的IDE(Eclipse Mars)中工作,但是在导出时它们都失败了。

我有一个图像文件,我只想从导出的jar中加载。

Project Setup

从项目布局中可以看出,Images是项目文件夹CooldownTrackerJava内部的文件夹。为了引用它,我尝试了各种方法。

//My class' name is AddItemDialog

//Method 1
String filePath = File.separator + "Images" + File.separator + "questionMark.png";
InputStream inputStream = AddItemDialog.class.getResourceAsStream(filePath);
BufferedImage img = ImageIO.read(inputStream);

我在几个方面尝试了方法1。我在filePath的开头使用和不使用File.separator尝试了它。 我知道前者指的是绝对路径,而后者是相对的。我也尝试将Images文件夹移动到我的类文件所在的目录中。

多次导出和测试时,所有这些都失败了NullPointerException

//Method 2
String saveLocation = File.separator + "Images" + File.separator + "questionMark.png";    
Image img = Toolkit.getDefaultToolkit().getImage(getClass().getResource(saveLocation));

As per this post我尝试了上述方法,但仍然无效。

除了本文中提到的那些之外,我尝试了许多变化,但是当我导出jar时,它们都没有成功。

我是否需要将Images文件夹添加到构建路径?我应该将它移到src文件夹吗?我错过了一个明显的步骤吗?所有建议都将受到高度赞赏。这里还有导出的jar文件的布局。

enter image description here

1 个答案:

答案 0 :(得分:2)

解决方案分为两部分。首先,我将Images文件夹移动到src目录中,如下所示。感谢马修。

enter image description here

然后我删除了File.separator并将其替换为正斜杠/。感谢fge。

  

不要使用File.separator()。类路径上资源路径的分隔符始终为/。如果你使用Windows,你将总是得到错误的结果。

我使用了方法1的变体来测试它。这两种方法都可行。

String saveLocation = "/Images/questionMark.png";
InputStream inputStream = this.getClass().getResourceAsStream(saveLocation);
try {
    BufferedImage img = ImageIO.read(inputStream);
} catch (IOException e) {
    e.printStackTrace();
}