2013-10-06 5 views
1

Я пытаюсь показать изображение, содержимое которого изменяется через некоторое время. Я показываю его в JLabel, но проблема в том, когда я перезагружаю это изображение, оно не меняется в JLabel, как кажется JLabel#setIcon(new ImageIcon("myImagePath.png")); кэширует изображение в памяти, и когда я изменяю его, оно ищет имя и не загружает его из жесткого диска.Обновить одно и то же изображение в JLabel

Даже я использую два изображения для перевода, чьи данные были изменены? Кто-нибудь знает, как это исправить? Но каждый раз, когда загрузка изображения с другим именем работает нормально?

Линии, создающие проблему: E.g. Мое изображение изменено на события нажатия кнопки

jlabel.setIcon("d:\\img.png"); 
jlabel.repaint(); 
+2

Просто примечание. Вы должны прочитать http://sscce.org, потому что у вас есть очень далеко от SSCCE. –

+0

Я видел [http://stackoverflow.com/questions/10445665/jlabel-refresh-icon-with-updated-image], но не помог –

+2

Я нашел [это] (http://stackoverflow.com/q/ 10318502/1057230), что может помочь. Иначе, пожалуйста, посмотрите, помогает ли этот [ответ] (http://stackoverflow.com/a/15187181/1057230). Хотя, как уже было сказано без SSCCE, трудно сказать что-либо :-) –

ответ

5

Я решил эту проблему с помощью ImageIO

try { 
    BufferedImage bufImg=ImageIO.read(new File("d:\\img.png")); 
    jlabel.setIcon(new ImageIcon(bufImg)); 
    //jlabel.repaint(); 
    //works even without repaint 
} 
catch (IOException ex) { 
    System.out.println("Unable to read image file"); 
} 

Благодаря NICE КОРОВА Также работает с mKorbel's answer в

ImageIcon img=new ImageIcon("D:\\img.png"); 
img.getImage().flush(); 
jlabel.setIcon(img); 

, но дон Не знаю, что проблема с setIcon(), если я не звоню img#getImage()#flush();. Кто-нибудь знает?

Также можно отметить, что

  1. ImageIO как-то медленно
  2. img.getImage().flush(); называют это будет мерцать изображение
  3. , но если у меня другое имя файла каждый раз, когда нет необходимости вызывать img.getImage().flush(); идти только на jlabel.setIcon(img); и изображение не мерцает.
+0

Образы, используемые приложением, позже станут частью этого развертывание и, следовательно, ссылаться на встроенный ресурс. Тогда было бы разумно получить доступ к ним с точки зрения «URL» вместо «Файл». Не используйте «Абсолютный путь» вместо «Относительный путь» в отношении '.class/package', используя' ClassName.class.getResource ("/ pathToImage/image.extension") ', как показано в [info ] (http://stackoverflow.com/tags/embedded-resource/info) из [tag: embedded-resource], смотрите ссылки, указанные на информационной странице. Для остальных вы НАСТОЯЩИМ ДОБРО ПОЖАЛОВАТЬ И СОХРАНЯТЬ СМОТРЕТЬ :-) –

+2

', но не знаете, что является проблемой с setIcon(). Кто-нибудь знает? - Какая проблема? Изображение кэшируется, поэтому вам нужно создать новую иконку, как было продемонстрировано ответом mKobel. – camickr

+0

@nIcE cOw: Я знаю эту вещь, но моя проблема заключалась в том, чтобы получить внешний образ, может быть загрузка из сети и запись в * temp * в том же файле. затем покажите –

Смежные вопросы