【问题标题】:javax.imageio.IIOException When reading the Input Filejavax.imageio.IIOException 读取输入文件时
【发布时间】:2019-03-18 21:58:05
【问题描述】:

我正在尝试将 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);

【问题讨论】:

  • 尝试使用绝对路径或者修复图片文件的相对路径。
  • @PushpeshKumarRajwanshi 我不明白。
  • .jar 文件中不包含src 文件夹,这就是它不起作用的原因
  • @HasithaMJayawardana:我的解释不适合评论,所以我尝试在我的回答中解释。
  • @PushpeshKumarRajwanshi 由于图像存储在src 文件夹中,因此应将其视为嵌入式资源。虽然使用绝对路径“可能”会立即解决问题,但从长远来看或执行位置发生变化时,它不会解决问题

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


【解决方案1】:

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

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

这表明您正在处理嵌入资源,该资源包含在类路径/Jar 文件中。在这种情况下,您应该使用 Class#getResource 加载资源,因为资源将无法作为 File 读取(如果它包含在 Jar 文件中)。

所以,你应该做一些更像...

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

【讨论】:

  • 我无法编写此代码 ImageIcon iconPicture = new ImageIcon(ImageIO.read(getClass().getResource("/PIC/Images/profileImage.png")));因为我正在一个单独的静态类中编写该代码。写 getClass() 时出错
  • @HasithaMJayawardana 在这种情况下使用,ClassName.class.getResource()
  • ? - 然后改用WhatEverYouClassNameIsBecauseYouveNotProvidedItInYourExampleSoIDontKnow.class.getResource(...)
  • @MadProgrammer 效果很好。非常感谢。
【解决方案2】:

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

./src/PIC/Images/profileImage.png

这里。指当前目录,当你必须运行你的程序时, .一定不是你想要的。所以解决问题的一种方法是使用绝对路径,就像

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

或者

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2023-04-04
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多