imageio.IIOException:无法读取输入文件

我一周前开始使用Java,现在我想在窗口中插入一个图像。 无论我尝试什么,我都在Eclipse中继续这样做: javax.imageio.IIOException:无法读取输入文件!

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); } 

}

我认为代码非常自我解释。 我试图解决这个 , 这个问题。

我正在尝试做的是桌面程序,我的源代码存储方式如下:training / src / graphics / Window training / src / src / main

我确实把我想要阅读的图像放在每个文件夹中,但仍然遇到问题:/

我做错了什么?

编辑终于解决了,这里是答案

nIcE cOw给了我帮助的链接 。 所以我确实把我的图像放到了一个文件夹中,并改变了访问它们的方式,如链接中所述。

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

你尝试过使用new File("logo.jpg"); (没有领先/)?

你确定,logo.jpg被复制到你的输出? (某些IDE不会将源目录中的每个文件复制到输出(或目标)目录。)

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

 /out |-> Window.class 

(请注意,IDE /编译器不会将图像复制到输出目录,因此编译后的代码无法找到图像 – 尽管您确实指定了正确的路径)

尝试调试您实际尝试访问的文件资源 。 第一步是获取new File("/logo.jpg").get [Canonical]Path()并将其打印到System.out (或者在调试器中观察)。 我想问题是/之前logo.jpg ,它指向你的根目录(例如c :),你的文件不存在,但我不知道你的文件设置详细。

问题是你在图像之前没有看到任何东西,所以它正在寻找一个无法找到它的文件夹。

您必须创建一个文件夹来存储项目中的图像,然后在图像名称前面调用它的文件夹名称。 例如

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

否则你可以通过遍历整个目录找到图像,这不是一个好方法,因为它需要更长的时间,当你移动你的项目时,它将不是一个工作链接,因为目录将是不同的。 例如:

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

在项目中创建一个文件夹,使其与目录中的源文件夹处于同一级别,并为其调用图像,如下所示:

文件夹结构;

设置

SRC

图像文件夹

箱子