Значок обновления 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 никогда не обновляет мое изображение. Я проверил свой код и работает, если я переключаюсь между двумя разными изображениями...

РЕДАКТИРОВАТЬ:

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


person Jonathan    schedule 04.05.2012    source источник
comment
вы меняете переменную имени файла или всегда используете одно и то же? Из того, что я могу сказать, глядя на предоставленный вами код, имя файла всегда одно и то же, поэтому оно будет рисовать одно и то же изображение.   -  person John Snow    schedule 04.05.2012
comment
Да, имя файла всегда одно и то же, но изображение обновляется...   -  person Jonathan    schedule 04.05.2012
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE. исключить все, что связано с FileWriter   -  person Andrew Thompson    schedule 04.05.2012
comment
Я не думаю, что проблема в том, что изображение не обновляется, я уверен, что это так. Хотя я думаю, что изображение не изменяется, как вы думаете. BufferedWriter используется для записи текста в файл, что вы делаете с помощью вызова write, но имя файла — это изображение, а не текстовый файл. Попробуйте закомментировать оператор try и изменить имя файла, чтобы оно ссылалось на другое изображение последним в вашем методе. Это подтвердит, заключается ли проблема в обновлении изображения, а не в обновлении   -  person John Snow    schedule 04.05.2012
comment
Когда я редактировал свой вопрос, я понял, что каждый раз создаю новый файл с отметкой времени. Изображение обновляется правильно, это эксперимент со словами в изображениях, поэтому мне нужно написать изображение, как если бы это был текст. Спасибо.   -  person Jonathan    schedule 04.05.2012


Ответы (1)


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 (который, очевидно, доступен в этом фрагменте).

person Andrew Thompson    schedule 04.05.2012
comment
Пожалуйста, примите ответ, если он помог решить проблему. - person Andrew Thompson; 22.11.2017