我正在尝试加载资源图片,但是我收到的错误是:
javax.imageio.IIOException: Can't read input file!
if(full.equals("")){
try{
full = HomePage.class.getResource("/images/default.jpg").getPath();
System.out.println(full);
File imgPath = new File(full);
BufferedImage bufferedImage = ImageIO.read(imgPath);
WritableRaster raster = bufferedImage.getRaster();
DataBufferByte data = (DataBufferByte)raster.getDataBuffer();
full = "data:image/jpeg;base64," + DatatypeConverter.printBase64Binary(data.getData());
}catch(IOException ex){
Logger.getLogger(HomePage.class.getName()).log(Level.SEVERE, null, ex);
}
}
当我打印变量full
时,我得到以下位置:
file:/C:/Users/rnaddy/Documents/NetBeansProjects/Phantom%20Browser/dist/run1534966744/Phantom_Browser.jar!/images/default.jpg
那么,我做错了什么?
答案 0 :(得分:1)
ImageIO知道如何从jar文件中读取,所以你可以说
BufferedImage bufferedImage = ImageIO.read(HomePage.class.getResource("/images/default.jpg"));
至于为什么您的解决方案无效,getResource
会返回一个网址。如果您在通过jar运行应用程序时将其打印出来,那么您将看到它为资源返回jar:file:/path/to/file
,而如果您运行getPath
并打印出来,那么您就可以了。请参阅file:/path/to/file
。
据推测,ImageIO
会根据您传入的网址类型对输入进行不同的处理。