ImageIcon(filename)
делегирует фактическую загрузку изображения в Toolkit.getDefaultToolkit().getImage(filename)
(возможно, не определено как таковое API, но я вижу это в источнике.)
Из Javadoc Toolkit.getImage()
:
Базовый инструментарий пытается разрешить несколько запросов с одним и тем же именем файла к одному и тому же возвращаемому изображению.
...
Если данные изображения, содержащиеся в указанном файле, изменяются, Image
объект, возвращаемый этим методом, может все еще содержать устаревшую информацию , которая была загружена из файла после предыдущего вызова .
Затем этот javadoc продолжается:
Ранее загруженные данные изображения можно вручную отбросить, вызвав метод flush()
для возвращенного Image
.
Так что, как предложила Мена, icon.getImage().flush()
должен выполнитьобмануть.