Java-ImageIcon不重新加载更新文件

Java-ImageIcon不重新加载更新文件,java,swing,jpanel,jlabel,imageicon,Java,Swing,Jpanel,Jlabel,Imageicon,作为Java应用程序的一部分,我有一个文件加载向导,允许用户向文件室添加图像。使用通用图像编辑软件,用户将.gif文件保存到我的应用程序访问的指定文件夹中,以便将.gif文件作为图标加载到JPanel上的JLabel中。这是在文件加载向导的第3步中使用一个新的ImageIcon完成的,它工作正常,图标显示 如果用户返回上一步(当JPanel重新加载上一步时,文件将从指定文件夹中删除),并使用通用图像编辑软件更新图像,然后使用相同的名称重新保存文件。然后转到文件加载向导的步骤3,再次调用新图像图标

作为Java应用程序的一部分,我有一个文件加载向导,允许用户向文件室添加图像。使用通用图像编辑软件,用户将.gif文件保存到我的应用程序访问的指定文件夹中,以便将.gif文件作为图标加载到JPanel上的JLabel中。这是在文件加载向导的第3步中使用一个新的ImageIcon完成的,它工作正常,图标显示

如果用户返回上一步(当JPanel重新加载上一步时,文件将从指定文件夹中删除),并使用通用图像编辑软件更新图像,然后使用相同的名称重新保存文件。然后转到文件加载向导的步骤3,再次调用新图像图标,但这次它仍然显示旧删除图像文件的宽度和高度。File对象上的lastModified值正在更改,因此我假设File对象正在加载更新的文件。但出于某种原因,ImageIcon对象仍在从删除的文件中提取值。但是,如果在上一步中更改了文件名,则图像图标将在文件加载向导的第3步中显示正确的宽度和高度值

图像是否缓存在新ImageIcon对象正在查找的位置

下面是我的文件加载向导中的代码片段。这在构建向导步骤JPanel的方法中

...Other Code Here...

int height = 0;
int width = 0;

File file = new File(fileLocation);         
String[] fileList = file.list();
    
if(fileList.length == 1){
    OrginialFileName = fileList[0];

    //Shouldn't this create a new instance of an ImageIcon?
    //Do I need to clear a cache somewhere?
    //ImageIcon object is not global and is only used locally in this conditional statement.  
    ImageIcon imageIcon = new ImageIcon(file + "\\" + OrginialFileName); 
    height = imageIcon.getIconHeight();
    width = imageIcon.getIconWidth();
    /*The width and height are pulling from the deleted file.  
      I have verified that the new file is the only file in the directory where the file loading 
      wizard is pulling from and the window's file properties screen shows the correct dimensions.*/


...Other Code Here...

从文件加载ImageIcon,然后调用ImageIcon#getImage#flush,然后再次从文件加载ImageIcon,在JPanel上显示正确的文件尺寸。

是,
ImageIcon
确实使用缓存。您需要使用
ImageIcon#getImage#flush
进行刷新