如何将图像作为类加载到同一个包中?

时间:2013-11-03 01:47:22

标签: java eclipse image

我正在我的eclipse工作区中制作JPanel。我有以下代码:

BufferedImage img = null;
try {
    img = ImageIO.read(new File("anno.png"));
} catch (IOException e) {System.out.println(e);}

并且文件“anno.png”与该类所在的包在同一个包中。但是当我运行它时,它总是显示以下消息:

javax.imageio.IIOException: Can't read input file!

我做错了什么?

2 个答案:

答案 0 :(得分:3)

通常无法使用File访问嵌入式资源(在Jar或应用程序上下文中重新提供的资源)。相反,你需要让我们的类加载器来做它

尝试使用...

img = ImageIO.read(getClass().getResource("anno.png"));

如果不起作用,请尝试使用...

img = ImageIO.read(getClass().getResource("/path/to/anno.png"));

相反

答案 1 :(得分:1)

你没找对地方。 Java在基于用户目录的目录中查找文件,而不是类目录。

解决方案:

  • 使用资源而不是文件。资源目录基于类目录。
  • 或者找出用户目录是什么,但在尝试读取图像之前打印出文件绝对路径。

我赞成前者:使用资源,而不是文件。即,getClass().getResourceAsStream("anno.png");

BufferedImage img = null;
try {
    img = ImageIO.read(getClass().getResourceAsStream("anno.png"));
} catch (IOException e) {
    e.printStackTrace();
}