【问题标题】:Reading image path with "ImageIO.read" to be displayed in a JLabel使用“ImageIO.read”读取图像路径以显示在 JLabel 中
【发布时间】:2020-04-01 17:11:42
【问题描述】:

完整的本地路径 (C:\\Users\\workspace\\myproject\\src\\eclipse\\mainclass\\icons\\my-image.png) 可以正常工作,但使用下面代码中的短路径会出现异常 javax.imageio.IIOException: Can't read input file!

我在这里做错了什么?

    JLabel lab_h1 = new JLabel();
    BufferedImage img = null;

    try {
        img = ImageIO.read(new File("icons/my-image.png"));

    } catch (IOException e) {
        e.printStackTrace();
    }

    Image dimg = img.getScaledInstance(140, 40,Image.SCALE_SMOOTH);

    lab_h1.setIcon(new ImageIcon(dimg));

【问题讨论】:

  • 你不想使用新文件你想使用资源。你的班级叫什么名字?你应该这样做new ImageIcon(MyClassName.class.getResource()); 然后你根本不需要使用 BufferedImage。
  • 您使用的是哪个版本的 java?哪个 Eclipse 版本?包含您在问题中发布的代码的类的名称是什么?那个类在一个包里吗?如果是,包名是什么? How do I ask a good question? 包含很多关于什么是 stackoverflow 中好问题的好建议

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


【解决方案1】:

您遇到的问题是,当您尝试使用相对路径打开文件时,它看起来相对于您运行程序的位置。您可以使用资源,而不是希望获得正确的路径。

BufferedImage img = ImageIO.read( 
       YourClassName.class.getResource(
             "/mainclass/icons/my-image.png"
       ) 
 );

我认为您可能需要修改路径,因为我不知道您的包结构是什么。我还假设 Eclipse 将捆绑源文件夹中的资源文件。

【讨论】:

  • 您的代码解决了这个问题。我认为我使用“新文件”而不是资源采取了错误的方法。它现在可以正确读取图像路径。
  • @MELS 很高兴听到它奏效了。当您想要读取应用程序中未包含的文件时,文件是很好的选择。由于您将其保留在源代码中,因此我希望您希望将其包含在您的应用中。
猜你喜欢
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
相关资源
最近更新 更多