我正在尝试将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);
答案 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());
找到当前路径,然后更正所给图像的相对路径。