21

我一周前开始使用 Java,现在我想在我的窗口中插入一个图像。无论我尝试什么,我都会在 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);
}

}

我认为代码很不言自明。我试图用这个这个那个来解决这个问题。

我想做的是一个桌面程序,我的源代码是这样存储的:training/src/graphics/Window training/src/src/main

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

我做错什么了?

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

漂亮的牛给了我帮助的链接。因此,我确实将图像放入了一个文件夹,并更改了访问它们的方式,如链接中所述。

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

4 回答 4

11

您是否尝试过使用new File("logo.jpg");(不带前导 /)?

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

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

变成

/out
|-> Window.class

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

于 2013-08-19T09:05:54.410 回答
6

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

于 2013-08-19T09:06:21.863 回答
4

问题是您在图像之前什么都没有看,所以它正在寻找一个找不到它的文件夹。

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

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

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

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

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

文件夹结构;

设置

源代码

图像文件夹

于 2016-02-19T00:09:41.570 回答
1

从工作项目复制粘贴:

  private JPanel getPanel() {
    JPanel panel = new JPanel();
    JLabel labelLcl = new JLabel("Ye ana!");
    try {
        File f = new File("./src/res/0.jpg");
        //l.a(f.getCanonicalPath());
        BufferedImage imgLcl = ImageIO.read(f);
        ImageIcon iconLcl = new ImageIcon(imgLcl);
        labelLcl.setIcon(iconLcl );
        panel.add(labelLcl);
  } catch (IOException e) {
       e.printStackTrace();
  }
    return panel;
}

否则您可能会遇到文件夹/文件读取权限问题

于 2021-02-14T13:59:54.040 回答