imageio.IIOException: Can't read input file

匿名 (未验证) 提交于 2019-12-03 03:05:02

问题:

I've started Java a week ago, and now I would like to insert an image into my window. Whatever I try I keep having this in Eclipse: javax.imageio.IIOException: Can't read input file!

package graphics; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import src.Common;  public class Window extends JFrame { public class Panel extends JPanel {      public void paintComponent(Graphics g)     {         Image img;          try          {         img = ImageIO.read(new File("/logo.jpg"));         g.drawImage(img, 0, 0, this);         }          catch (IOException e)          {         e.printStackTrace();         }      } }  public Window(String title, int width, int height) {     this.setTitle(title);     this.setSize(width, height);     this.setLocationRelativeTo(null);     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     this.setContentPane(new Panel());      this.setVisible(true); } 

}

I think the code is pretty self-explaining. I tried to solve the problem with this, this, and that .

What I'm trying to do is a desktop program, and my sources are stored like that : training/src/graphics/Window training/src/src/main

I did put the image I want to read in every folder, and still getting the issue :/

What did I do wrong?

EDIT Finally solved, here the answer

nIcE cOw gave me the link that helped. So I did put my images into a folder, and change the way to access to them, as described in the link.

getClass().getResource("/images/yourImageName.extension"); 

回答1:

Have you tried using new File("logo.jpg"); (without the leading /)?

And are you sure, the logo.jpg is copied to your output? (Some IDEs don't copy every file from your source-directories to your output (or target) directories.)

/src |-> Window.java |-> Logo.jpg 

becomes

/out |-> Window.class 

(Note that the IDE/compiler does not copy the image to your output-directory and so the compiled code cannot find the image - allthough you did specify the correct path)



回答2:

Try do debug which file resource you actually try to access. First step would be to get your new File("/logo.jpg").get [Canonical]Path() and print it to System.out (or alternatively watch in the the debugger). I guess the problem is the / before logo.jpg, which points to your root directory (e.g. c:) and your file isn't there, but I don't know your file setup in detail.



回答3:

The problem is that you're looking at nothing before the image, so it's looking into a folder that isn't there to find it.

You have to create a folder to store the images in your project, and then call to it, your folder name in front of the image name. e.g.

ImageIO.read(new File("Folder/Image.png")); 

Otherwise you can find the image by going through the entire directory, which isn't a good way as it takes longer, and when you move your project it won't be a working link as the directory will be different. For example:

ImageIO.read(new File("D:/eclipse/Workspace/Project/Folder/Image.png")); 

Creating a folder in your project so its on the same level as the source folder in the directory and call to it for the image, like so:

Folder structure;

settings

src

Image Folder

bin



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!