Toolkit.getDefaultToolkit().getImage(...) 方法可接受 String 或者是 URL 参数,用以指定图像文件的路径。
如果图片路径是不变的,那么该方法返回的 Image 对象就会是最开始那一个,除非你重启了应用。
public static void main(String[] args){
//a.jpg 473*209 b.jpg 98*113
imgCache("D:\\dps\\demo\\a.jpg", "D:\\dps\\demo\\b.jpg");
}
public static void imgCache(final String srcImgFilePath,final String destImgFilePath){
Image img=null;
try{
img= Toolkit.getDefaultToolkit().getImage(srcImgFilePath);
//如果图片过大,可能会出现延迟,为了防止这种情况发生我们可以在图片完全被加载进来
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(img, 0);
mediaTracker.waitForID(0);
}catch(InterruptedException ex){
System.out.println("解析"+srcImgFilePath+" 图片出错,出错原因:"+ex.getMessage());
}
System.out.println("width:"+img.getWidth(null)+" height:"+img.getHeight(null));
//删除图片
File aImgFilePath=new File(srcImgFilePath);
if(aImgFilePath.exists()){
aImgFilePath.delete();
}
//重命名
File bImgFilePath=new File(destImgFilePath);
bImgFilePath.renameTo(aImgFilePath);
//读取b.jpg 图片
try{
img= Toolkit.getDefaultToolkit().getImage(srcImgFilePath);
//如果图片过大,可能会出现延迟,为了防止这种情况发生我们可以在图片完全被加载进来
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(img, 0);
mediaTracker.waitForID(0);
}catch(InterruptedException ex){
System.out.println("解析"+srcImgFilePath+" 图片出错,出错原因:"+ex.getMessage());
}
System.out.println("width:"+img.getWidth(null)+" height:"+img.getHeight(null));
}
解决办法:
查询jdkAPi,最后通过对返回的 Image 调用 flush 方法,可以手动丢弃以前加载的信息
img= Toolkit.getDefaultToolkit().getImage(srcImgFilePath);
img.flush();