我一周前开始使用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);
}
}
我认为代码非常自我解释。 我尝试使用this,this和that来解决问题。
我正在尝试做的是桌面程序,我的源代码存储方式如下: 培训/ src目录/图形/窗口 训练/ SRC / SRC /主
我确实在每个文件夹中放了我想要阅读的图像,但仍然遇到问题:/
我做错了什么?
编辑终于解决了,这里是答案
nIcE cOw给了我帮助的link。 所以我确实把我的图像放到了一个文件夹中,并改变了访问它们的方式,如链接中所述。
getClass().getResource("/images/yourImageName.extension");
答案 0 :(得分:6)
您是否尝试使用new File("logo.jpg");
(没有前导/)?
您确定,logo.jpg被复制到您的输出中吗? (某些IDE不会将源目录中的每个文件复制到输出(或目标)目录。)
/src
|-> Window.java
|-> Logo.jpg
变为
/out
|-> Window.class
(请注意,IDE /编译器不会将图像复制到输出目录中,因此编译后的代码无法找到图像 - 尽管您确实指定了正确的路径)
答案 1 :(得分:3)
尝试调试您实际尝试访问的文件资源。第一步是获取new File("/logo.jpg").get [Canonical]Path()
并将其打印到System.out
(或者在调试器中查看)。我想问题是/
logo.jpg
之前的{{1}},它指向你的根目录(例如c :)并且你的文件不存在,但我不知道你的文件设置是否详细。< / p>
答案 2 :(得分:2)
问题是你在图像之前没有看到任何东西,所以它正在寻找一个无法找到它的文件夹。
您必须创建一个文件夹来存储项目中的图像,然后在图像名称前面调用您的文件夹名称。 e.g。
ImageIO.read(new File("Folder/Image.png"));
否则你可以通过遍历整个目录找到图像,这不是一个好方法,因为它需要更长的时间,当你移动你的项目时,它将不是一个工作链接,因为目录将是不同的。例如:
ImageIO.read(new File("D:/eclipse/Workspace/Project/Folder/Image.png"));
在项目中创建一个文件夹,使其与目录中的源文件夹处于同一级别,并为其调用图像,如下所示:
文件夹结构;
设置
的src
图像文件夹
仓
答案 3 :(得分: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;
}
否则你可能会遇到文件夹/文件读取权限问题