我看到other StackOverflow users出现此错误。但是,当我尝试第一个人所做的事情时(使用getClass().getClassLoader().getResource(myPath)
,即URL),它在Eclipse IDE运行和JAR文件中都不起作用。我无法理解here上的其中一个答案,但我理解这一点:
getImage调用正在查看文件系统工作目录,而不是在Jar文件中。这就是当jar文件放在jar文件外部的同一目录中时,jar文件成功加载图像的原因。如果图像捆绑在jar文件中,则它们不再是要访问的文件系统文件,而是Jar文件资源。有一种不同的方法来加载这些,但很抱歉,我不知道它在我的头顶
在此之前,我认为图像文件(其相对路径为/images/folder.jpg
未包含在JAR文件中。我提取它并找不到图像。)为了解决这个问题,我加入了构建路径中的images
文件夹(Project > Properties > Java build path > Source
)。在这样做之后,我再次提取JAR文件,并注意图片在那里,但不在图像文件夹中。
这是我在Java代码方面尝试过的:
//this.selectDirector = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/folder.jpg")));
this.selectDirectory = new JButton(new ImageIcon("images/folder.jpg"));
是否有答案(或者说要做的事情应该做什么)? 更新:
我将images
文件夹移到了bin
文件夹中,并将其从构建路径中删除(因此只有src
文件夹位于构建路径上)。为了更好地衡量,我还将其放在src
文件夹中。我将我的两行代码更新为:
this.selectDirector = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/folder.jpg")));
//this.selectDirectory = new JButton(new ImageIcon("src/images/folder.jpg"));
现在,它可以在Eclipse中运行,但仍然无法使用JAR文件(它正在抛出NullPointerException
)。
答案 0 :(得分:0)
我无法弄清楚如何保证Eclipse将images
文件夹与其中的folder.jpg
一起发送到其他代码中,即使我将其放入src
和{{ 1}}文件夹。尽管如此,我仍然能够解决问题
我最终做了什么
我记得JAR文件是什么:Java生成的压缩文件(类似于RAR文件或ZIP文件)。知道了,我用WinRAR打开了生成的JAR文件,转到项目目录,并将bin
文件夹拖到WinRAR实例中。 WinRAR将images
文件夹放在JAR文件中!然后我将我的Java代码(使用images
)更改为:folder.jpg
缺点
缺点是我必须保持this.selectDirectory = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/folder.jpg")));
文件夹浮动,以便在Eclipse的每次新导出时运行WinRAR并复制images
。必须存在更好的方法,但我现在会接受这个......