0

我正在我的 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!

我究竟做错了什么?

4

2 回答 2

3

嵌入式资源(在 Jar 或应用程序上下文中重新存在的资源)通常不能通过使用File. 相反,您需要让我们使用类加载器来完成它

尝试使用...

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

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

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

反而

于 2013-11-03T01:50:01.540 回答
1

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

解决方案:

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

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

BufferedImage img = null;
try {
    img = ImageIO.read(getClass().getResourceAsStream("anno.png"));
} catch (IOException e) {
    e.printStackTrace();
}
于 2013-11-03T01:48:15.590 回答