Java 导出到runnable jar时未找到图像

Java 导出到runnable jar时未找到图像,java,eclipse,jbutton,imageicon,Java,Eclipse,Jbutton,Imageicon,在我的应用程序中,我有两个包,其中一个包含.class文件,另一个存储图片。几乎所有的图像都用作按钮 因此,目前该项目的结构如下所示: 我像这样初始化这些按钮,在Eclipse中启动时,一切正常: btnRegisterBack.setIcon(new ImageIcon(new ImageIcon(Gui.class.getResource("/resources/back.png")).getImage().getScaledInstance(50, 50, Image.SCALE_DEF

在我的应用程序中,我有两个包,其中一个包含.class文件,另一个存储图片。几乎所有的图像都用作按钮

因此,目前该项目的结构如下所示:

我像这样初始化这些按钮,在Eclipse中启动时,一切正常:

btnRegisterBack.setIcon(new ImageIcon(new ImageIcon(Gui.class.getResource("/resources/back.png")).getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT)));
因为我已经看完了所有关于这个主题的stackoverflow文章,并且毫不费力地尝试了上面提到的所有内容

到目前为止,我所尝试的当然是检查构建路径,但到目前为止,我想所有内容都应该包括在内(我想在这里给你一个它的图像,这样你就可以检查这个,但是stackoverflow说我需要至少10个声誉来获得2个以上的链接)

除此之外,我首先将图片存储在与它们相同的包中的.class文件旁边(这是起点),然后尝试解决将图片首先移动到“资源”包(如上所示),然后移动到本文建议的新文件夹:stackoverflow。com/questions/25635636/eclipse导出的可运行jar不显示图像

在所有这些尝试都不起作用之后,我只是查看了一下.jar文件,以检查图像是否已经导出。它们直接存储在.jar中的“资源”文件夹中,该文件夹与.class文件的路径不同:

因此,我认为可以通过给路径“向后”这样的方式来参考图像

因为它们存储在不同的目录中。我一直在尝试对上面的文件夹执行不同的步骤,也尝试了“/../”、“/../”、“../”、“../”、“../”、“/”、“/”之间是否存在差异,但到目前为止唯一改变的是,除非我返回到“旧路径”(“/resources/back.png”),否则该程序现在也无法在Eclipse中工作

我尝试的最后一件事是使用“retrieveImage”方法,该方法使用来自java.net的URL,正如其他人在Stack Overflow上建议的那样,但这也没有解决任何问题


这是一份大学作业。

您的文件名为
Back.png
,而不是
Back.png
。检查这个主题,答案可能会对您有所帮助:@JB Nizet,我想我已经检查过了,如果它是用大写字母写的,Java没有什么区别,但我会尝试一下。@Balázsnees,我只是尝试使用本文中所写的内容,但不知何故,我的Eclipse无法识别ImagIO.read“ImageIO.read无法解析为类型。对此有什么建议吗?:/编辑:只需从你链接的文章中复制粘贴的代码,而不是自己键入,现在就可以了working@Balázsnees非常感谢你,非常感谢,经过一些调整后完全奏效了,我欠你太多了,我不知道我现在该说什么,我很高兴它能工作你的文件名为
Back.png
,not
back.png
。检查此主题,答案可能会对您有所帮助:@JB Nizet,我想我已经检查过了,Java是否用大写字母书写没有什么区别,但我会尝试一下。@Baláznemes,我只是尝试使用本文中所写的内容,但不知何故,我的Eclipse无法识别ImagIO.read“ImageIO.read无法解析为类型。对此有什么建议吗?:/编辑:只需从你链接的文章中复制粘贴的代码,而不是自己键入,现在就可以了working@Balázsnees非常感谢你,非常感谢,经过一些调整后完全起作用了,我欠你太多了,我不知道现在我该说什么,我很高兴它起作用了
btnRegisterBack.setIcon(new ImageIcon(new ImageIcon(Gui.class.getResource("/../../../resources/back.png")).getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT)));