使用“ ImageIO.read”读取要在JLabel中显示的图像路径

时间:2020-04-01 17:11:42

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

完整的本地路径(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));

1 个答案:

答案 0 :(得分:2)

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

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

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