读取带有 "ImageIO.read" 的图像路径以显示在 JLabel 中

Reading image path with "ImageIO.read" to be displayed in a JLabel

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

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

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

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