2012-05-04 2 views
3

Я пытаюсь провести эксперимент по манипулированию изображениями. В основном у меня есть изображение, которое постоянно обновляется таймером, и я показываю это изображение в JLabel.Значок обновления JLabel с обновленным изображением

Моя проблема в том, что JLabel не обновляет изображение.

Вот мой код таймера:

Timer timer = new Timer(200, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      count++; 

      System.out.println("timer"); 
      System.out.println(filename); 

      ImageIcon icon = new ImageIcon(filename); 

      label = new JLabel(); 
      label.setIcon(icon); 
      label.setText(""+count); 

      panel = new JPanel(); 
      panel.add(label); 

      frame.getContentPane().removeAll(); 
      frame.getContentPane().add(panel); 

      frame.repaint(); 
      frame.validate(); 

      try{ 
       FileWriter fstream; 

       fstream = new FileWriter(filename,true); 

       BufferedWriter out = new BufferedWriter(fstream); 

       out.write("text to append"); 
       out.close(); 
      }catch (Exception ex){ 
       System.err.println("Error: " + ex.getMessage()); 
      } 
     } 
    }); 

Где имя файла путь к моему образу.

Изображение отображается, но JLabel никогда не обновляет мое изображение. Я проверил мой код и работает, если я Swich между двумя различными изображениями ...

EDIT:

Я решается дубликата каждый раз, когда последний образ, созданный и переименовании с меткой времени.

+1

Вы изменяете переменную имени файла или используете ли вы все то же самое? Из того, что я могу сказать, посмотрев код, который вы указали, имя файла всегда одно и то же, чтобы оно нарисовало одно и то же изображение. –

+0

Да имя файла всегда одно и то же, но изображение обновляется ... – Jonathan

+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). Фактор вне ничего с 'FileWriter' –

ответ

6
label = new JLabel(); 
label.setIcon(icon); 
label.setText(""+count); 

panel = new JPanel(); 
panel.add(label); 

frame.getContentPane().removeAll(); 
frame.getContentPane().add(panel); 

frame.repaint(); 
frame.validate(); 

Заменить все, что-то вроде:

label.setIcon(icon); 

Если метка не видна в этой точке, объявим его как атрибут класса внешнего класса или на том же уровне, что и frame (который, очевидно, доступен в этом фрагменте).

+0

Пожалуйста, [примите ответ] (http://meta.stackexchange.com/a/5235/155831), если это помогло решить проблему. –