我正在我的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!
我做错了什么?
答案 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();
}