Конструктор ImageIcon () внутренне использует Toolkit.getDefaultToolkit().getImage
.
Вы должны вручную использовать Toolkit.getDefaultToolkit().createImage
вместо Toolkit.getDefaultToolkit().getImage
. Последний использует кэш, тогда как первый не возвращает и всегда возвращает новый экземпляр.
new ImageIcon(Toolkit.getDefaultToolkit().createImage("..filename.."))
Из javado c из createImage
:
Возвращенное изображение новый объект, который не будет предоставлен другим пользователям этого метода или его варианту getImage.
Сравните с javado c из getImage
:
Базовый набор инструментов пытается разрешить несколько запросов с одним и тем же именем файла для того же возвращенного изображения . [...] Если данные изображения, содержащиеся в указанном файле, изменяются, объект изображения , возвращаемый этим методом, может по-прежнему содержать устаревшую информацию , которая была загружена из файла после предыдущего вызова.
Кажется, не существует javado c или spe c, который предписывает, чтобы ImageIcon использовал кэшированные изображения, так что это прекрасный пример того, как программирование fr agile, если вы не знаете на 100%, что вы делаешь. Даже если он работает в одной среде, это не значит, что он всегда работает.