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

tro*_*guy 17 java image

我一周前开始使用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);
}
Run Code Online (Sandbox Code Playgroud)

}

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

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

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

我做错了什么?

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

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

getClass().getResource("/images/yourImageName.extension");
Run Code Online (Sandbox Code Playgroud)

dee*_*-64 7

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

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

/src
|-> Window.java
|-> Logo.jpg
Run Code Online (Sandbox Code Playgroud)

/out
|-> Window.class
Run Code Online (Sandbox Code Playgroud)

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


Las*_*ame 6

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