Java - перекрашивать компонент каждую секунду? - PullRequest
3 голосов
/ 04 июня 2010

Я хотел бы перекрашивать компонент через каждую секунду, но он не работал. Что я пытаюсь это:

    try{
        while(true){
            Thread.currentThread().sleep(1000);
            gc.cb.next();
            gc.repaint();
        }
    }
    catch(Exception ie){
    }

Ответы [ 2 ]

9 голосов
/ 04 июня 2010

Я бы посоветовал использовать javax.swing.Timer для этой проблемы, которая будет периодически запускать ActionEvent в потоке диспетчеризации событий (обратите внимание, что вы должны вызывать только перерисовывать и / или манипулировать компонентами Swing из этого нить). Затем вы можете определить ActionListener для перехвата события и перекрасить ваш компонент в этот момент.

Пример

JComponent myComponent = ...
int delay = 1000; //milliseconds

ActionListener taskPerformer = new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    myComponent.repaint();
  }
};

new Timer(delay, taskPerformer).start();

Также обратите внимание, что SwingWorker, вероятно, неуместно , так как он обычно используется для фоновых задач с определенным началом и концом, а не для периодических задач.

1 голос
/ 04 июня 2010

Убедитесь, что вы не загружаете UI-поток для этого. Если вы выполняете этот цикл в потоке пользовательского интерфейса, событие repaint никогда не будет отправлено.

Еще одна заметка; sleep является статическим методом и должен вызываться как Thread.sleep(...). (В любом случае нет способа сделать thatThread.sleep(...).)

«Правильный» способ сделать это, вероятно, использовать SwingWorker. Взгляните на учебник .

Если вы предоставите больше кода, мы сможем дать лучшие ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...