开发GUI开发,用到了图片片调用,总出现Can’t read input file等异常。
解决方法:
首先、检查目录是否书写正确存在。
不要以为我认为是正确的,笔者作为前端开发,对相对路径、绝对路径有点过于自信了,却对错误路径没有那么深刻的认识。
只有保证了目录正确性,才能进行正确的调试。
笔者在开发过程中,将图片目录进行了重命名,这样导致目录就不存在,进而导致程序报异常。
初步接触这东东,起初以为是项目配置,或者某些应用方法不对导致的报错。所以一直在JAVA语法和用法上找问题,只有保证目录正确的前提下,进一步进行语法检查才有意义。
其次、在IDEA下开发,多模块开发时要注意(详见下一文章)
另外附上,这几天开发遇到的两种写法:
import javax.imageio.ImageIO;
import java.awt.Toolkit;
// 省略...
// 写法1:
Image titleIcon1 = Toolkit.getDefaultToolkit().getImage("src/resources/images/logo.png");
// 写法2:
Image titleIcon2 = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/resources/images/logo.png"));
// 写法3:
try {
Image titleIcon3 = ImageIO.read(new File("src/resources/images/logo.png"));
} catch (IOException e) {
e.printStackTrace();
}
// 图片相对项目根目录路径为:src/resources/images/logo.png
上文中的src建在项目根目录下,如果引用文件夹与src在同一级目录,例如:temp与src同一级目录,我们需要调用temp下的图片时。可以写为:
Image titleIcon1 = Toolkit.getDefaultToolkit().getImage("temp/logo.png"); // 这里temp与src为同级目录,且都在根目录下。
如果上述方法不能解决问题,请特别注意:
要注意的一点,read的file路径是不能有中文的,java文件可能也不能放在含中文的路径中。否则的话会catch到如下错误:
javax.imageio.IIOException: Can’t read input file!
at javax.imageio.ImageIO.read(Unknown Source)
这个问题基本翻遍的互联网也没有找到答案,最终把所有的相关中文路径进行了更改,一不小心就解决了问题。扎心,只是知道开发最好不要用中文目录,这里大意了。