Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JButton上的图像图标未显示在可运行JAR文件中_Java_Image_Swing_Awt_Embedded Resource - Fatal编程技术网

Java JButton上的图像图标未显示在可运行JAR文件中

Java JButton上的图像图标未显示在可运行JAR文件中,java,image,swing,awt,embedded-resource,Java,Image,Swing,Awt,Embedded Resource,我的GUI上有6个JButton,上面都有图像, 当我编译并运行代码时,JButtons上的所有图像都会完美地显示出来 但在runnable JAR文件中,JButtons上的图像不会显示。。如何解决此问题 我在代码中使用此方法在JButtons上显示图标 ImageIcon SettingsIc = new ImageIcon("bin/images/settings.png"); jb1 = new JButton(SettingsIc); jb1.setFocusPainted( fals

我的GUI上有6个JButton,上面都有图像, 当我编译并运行代码时,JButtons上的所有图像都会完美地显示出来 但在runnable JAR文件中,JButtons上的图像不会显示。。如何解决此问题

我在代码中使用此方法在JButtons上显示图标

ImageIcon SettingsIc = new ImageIcon("bin/images/settings.png");
jb1 = new JButton(SettingsIc);
jb1.setFocusPainted( false );
//jb1.setBorderPainted(false); 
jb1.setContentAreaFilled(false);
这就是我在Eclipse中编译代码时GUI的外观

这就是我的GUI在执行可运行JAR文件后的样子 这(正如许多人所指出的)

表示您正试图从文件系统的
bin/images
加载图像。这是从应用程序的执行点开始的相对路径

如果文件不存在,
ImageIcon
不会抱怨

如果可能的话,最好将资源嵌入Jar文件中(这将使部署更容易),并使用类似于
getClass().getResource(“/bin/images/settings.png”)
的方法加载图像


如果可能,您应该尝试使用
ImageIO.read(URL)
加载图像,如果
文件所指向的资源不存在(或无效),它将引发异常。

只需将jar和图像保存在同一文件夹中,然后重试 保持

ImageIcon图标=新的ImageIcon(“image.jpg”)


在代码中

您可能试图访问图像,因为jar文件中不存在文件和文件。相反,尝试将它们作为资源访问。这个问题已经在这个网站和其他网站上被问过很多次了(包括我的几个答案),你可以很容易地通过搜索找到更多关于这个问题的信息。试试看,你不会失望的。祝你好运。那些图标的路径正确吗?在jar文件中?在bin/images/settings.png下?@HovercraftFullOfEels我想你又一次“一针见血”。至于“可能”的注意事项,
newimageicon(“bin/images/settings.png”)
支持
文件
的一部分,其名称模糊地暗示应用程序资源应该是一个应用程序资源。@user2003602:请看一看,谢谢你的回答,我一定会尝试你提到的方法。但我注意到,如果我解压缩我的jar文件,其中有一个名为images的文件夹,是否可以访问该文件夹?是的。我想它应该是
/images/settings.png
而不是
/bin/images/settings.png
,但这取决于目录structure@user2003602:同样,这取决于您的jar目录结构,这是我们不太清楚的。麦德的建议很贴切。1+@user2003602也-确保您使用的是
getClass().getresource(…)
而不仅仅是普通字符串值。
字符串
值表示文件资源,嵌入式资源不是文件。这不是答案。上面已经给出了答案,提问者也接受了答案。
ImageIcon SettingsIc = new ImageIcon("bin/images/settings.png");