Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用“读取图像路径”;ImageIO.read";在JLabel中显示_Java_Swing_Bufferedimage_Embedded Resource_Javax.imageio - Fatal编程技术网

Java 使用“读取图像路径”;ImageIO.read";在JLabel中显示

Java 使用“读取图像路径”;ImageIO.read";在JLabel中显示,java,swing,bufferedimage,embedded-resource,javax.imageio,Java,Swing,Bufferedimage,Embedded Resource,Javax.imageio,完整的本地路径(C:\\Users\\workspace\\myproject\\src\\eclipse\\mainclass\\icons\\my image.png)工作正常,但使用下面代码中的短路径会出现异常javax.imageio.IIOException:无法读取输入文件 我做错了什么 JLabel lab_h1 = new JLabel(); BufferedImage img = null; try { img = ImageIO.re

完整的本地路径(
C:\\Users\\workspace\\myproject\\src\\eclipse\\mainclass\\icons\\my image.png
)工作正常,但使用下面代码中的短路径会出现异常
javax.imageio.IIOException:无法读取输入文件

我做错了什么

    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将绑定源文件夹中的资源文件。

如果您不想使用新文件,那么您就要使用资源。你们班的名字是什么?您应该执行
新建图像图标(MyClassName.class.getResource())那么您根本不需要使用BuffereImage。您使用的是哪个版本的java?哪个Eclipse版本?包含您在问题中发布的代码的类的名称是什么?那门课是打包的吗?如果是,包名是什么?包含了很多关于StackOverflow中什么是好问题的好建议。您的代码解决了这个问题。我认为我使用“新文件”而不是资源的方法是错误的。它现在正在正确地读取图像路径。@MELS很高兴听到它工作了。当您想读取应用程序中未包含的文件时,文件是良好的。由于您将此保留在源代码中,我希望您希望将其包含在应用程序中。