javax.imageio.IIOException读取输入文件时

时间:2018-10-14 07:15:45

标签: java swing embedded-resource imageicon javax.imageio

我正在尝试将Image设置为JLabel。我使用了这段代码,并且在IDE中运行良好。但是,当我尝试在dist文件夹中运行Executable Jar文件时,出现此错误。

  

javax.imageio.IIOException:无法读取输入文件!

如何解决该问题。 请任何人可以帮助我吗?预先感谢。

代码为

ImageIcon iconPicture = new ImageIcon(ImageIO.read(new File("./src/PIC/Images/profileImage.png")));
pictureLabel.setIcon(iconPicture);

2 个答案:

答案 0 :(得分:4)

您不能依赖于“工作目录”与Jar /类的存储位置相同。

ImageIcon iconPicture = new ImageIcon(ImageIO.read(new File("./src/PIC/Images/profileImage.png")));

这向我暗示您正在处理一种嵌入式资源,该资源包含在classpath / Jar文件中。在这种情况下,您应该改为使用Class#getResource加载资源,因为该资源将无法读取为File(如果它包含在Jar文件中)。

因此,除了上述内容之外,您还应该做更多类似的事情...

ImageIcon iconPicture = new ImageIcon(ImageIO.read(getClass().getResource("/PIC/Images/profileImage.png")));

答案 1 :(得分:3)

您的程序在运行时无法从给定路径中找到图像

./src/PIC/Images/profileImage.png

这里。指的是当前目录以及何时必须运行程序时。一定不是您想要的样子。因此,解决此问题的一种方法是使用绝对路径,即

D:/work/proj1/src/PIC/Images/profileImage.png

您需要根据项目找到当前目录,然后构造正确的相对路径。

您可以使用以下一个衬里代码找到当前目录路径,

System.out.println(new File(".").getCanonicalPath());

找到当前路径,然后更正所给图像的相对路径。