我的项目正在加载ImageIcon,该图像将从路径中删除。
最初,我已将图像从文件路径加载到ImageIcon,然后从该路径删除了图像文件。再次,我试图将图像从删除的路径加载到Same ImageIcon对象,它显示的是删除的图像。
File file = new File(Utility.generate_file_path("Ec_resized_image\\ansi.png"));
System.out.println(Utility.generate_file_path("Ec_resized_image\\ansi.png")
+ " : " + file.exists());
ImageIcon icon = new ImageIcon(Utility.generate_file_path("Ec_resized_image\\ansi.png"));
System.out.println("Width: " + icon.getIconWidth());//Here it the image width is showing 1920
file.delete(); //here I am deleting the file
System.out.println(Utility.generate_file_path("Ec_resized_image\\ansi.png") + " : " + file.exists()); // here file.exists() says false.
icon = new ImageIcon(Utility.generate_file_path("Ec_resized_image\\ansi.png")); // Again loading the deleted path
System.out.println("Width: " + icon.getIconWidth());////Here it the image width is showing again 1920
答案 0 :(得分:2)
ImageIcon(filename)
将图像的实际加载委托给Toolkit.getDefaultToolkit().getImage(filename)
(可能不是API定义的,但是我在源代码中看到了这一点。)
来自Toolkit.getImage()
的Javadoc:
基础工具包尝试将多个具有相同文件名的请求解析为相同的返回图像。
...
如果指定文件中包含的图像数据发生更改,则从此方法返回的Image
对象可能仍包含过时信息,该信息是在先前调用后从文件中加载的 >。
然后,此javadoc继续:
可以通过在返回的
flush()
上调用Image
方法来手动丢弃先前加载的图像数据。
因此,正如Mena建议的那样,icon.getImage().flush()
应该可以解决问题。