Eclipse错误:javax.imageio.IIOException:无法读取输入文件

7
以下代码在BlueJ IDE中成功运行,但在Eclipse中无法正常工作。
String path="images/pic1.jpg";

BufferedImage myPicture = null;
    try {
        myPicture = ImageIO.read(new File(path));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我的图片路径在IDE中都是相同的。同时我观察到,*.class文件和图像文件的目录结构也是相同的。

为什么这只会发生在Eclipse中呢?


"images/pic1.jpg" 是一个应用程序资源吗?'应用程序资源'可能是用于按钮或菜单项的图标,应用程序背景或启动画面等。如果是这样,那么代码使用的方法完全错误。它应该通过运行时类路径中的URL访问图像。如果有智能问题提出,将进一步解释。 - Andrew Thompson
在调用read之前,你应该assert文件存在,以排除更多的失败可能性。 - Volker Stolz
如果我使用运行时类路径,则应将图像路径包含在其中。我的问题是,在Java应用程序中使用文件中的图像的正确方法是什么? - paraguma
7个回答

4

您必须使用

System.getProperty("user_dir")+File.separator+"image"+File.separator+"im0001.jpg";

2

这并不是Eclipse的错误。您需要将图像文件复制到Eclipse项目主文件夹中(而不是src子文件夹中)。


1
Eclipse将默认文件位置设置为根目录的bin文件夹,而不是根目录或包文件夹。请确保您的文件位于bin文件夹中。

1
请确保您的图像文件夹是资源文件夹(即位于CLASSPATH上),并进行编写。
  BufferedImage myPicture = null;
   try {
      myPicture = ImageIO.read("images/pic1.jpg");
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

或者使用替代方案。

   BufferedImage myPicture = null;
   try {
      myPicture = ImageIO.read(this.getClass().getResource("/images/pic1.jpg"));
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

在BlueJ IDE中,代码都能正常运行。但是在Eclipse中,两者都无法运行。 - paraguma
ImageIO.read(this.getClass().getResource("/images/pic1.jpg")); 在 Eclipse 中可以运行。 - Balayesu Chilakalapudi

0

Eclipse中的默认库不支持"ImageIO"。


0

只需使用System.out.println(System.getProperty("user.dir"));检查您的图像路径即可。


0

试试这个...

String path="d:\\images\\pic1.jpg";

BufferedImage myPicture = null;
    try {
        myPicture = ImageIO.read(new File(path));
    } catch (IOException e) {
        e.printStackTrace();
    }

1
IMO源代码从不需要超过一行的“空格”。这同样适用于发布到SO的代码。 - Andrew Thompson
1
这并不是什么大不了的事情!! 但是使用绝对路径是一个 坏习惯。这段代码将无法在其他机器上运行 - paraguma
请告诉我这个问题的解决方案。 - paraguma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接