论坛首页 Java企业应用论坛

Toolkit.getDefaultToolkit().getImage(...) 方法应该是有缓存的

浏览 4273 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-28  

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();
 

 

  • 大小: 24.8 KB
  • 大小: 8.1 KB
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics