2010-02-18 2 views
0

Я обновляю текстовое поле через определенное время.Обновление текстового поля после определенного интервала

Вот мой код:

ActionListener task = new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      try { 
        tip1.setText(ad1.tip1()); 
        tip2.setText(ad1.tip2()); 
        tip3.setText(ad1.tip3()); 
       } catch (Exception e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 
      } 
    }; 

     new javax.swing.Timer(1000, task).start(); 

мое приложение откос очень медленно, используя этот код.

ответ

2

Редактировать: Это неправильное решение.

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

try { 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run() { 
      tip1.setText(ad1.tip1()); 
      tip2.setText(ad1.tip2()); 
      tip3.setText(ad1.tip3()); 
      } catch (Exception e1) { 
       e1.printStackTrace(); 
      } 
    }); 
} 

ВС имеет несколько большую tutorials по этому вопросу.

+0

У меня создалось впечатление, что использование таймера Swing поместит его в EDT. – Javamann

+0

спасибо за учебник. – nicky

+0

Действительно, этот ответ неверен. Для этого подходят таймеры, и использование Invoke Later не требуется. – jjnguy

0

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

update.addActionListener(task); 

Что такое update и как часто слушатель/задача быть уволены (в дополнение к казни через срабатывает таймер)?

+0

код редактируется. тетфилд должен обновляться через 1 сек. – nicky

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