вызвать метод в указанное время - PullRequest
1 голос
/ 07 июня 2010

Как я могу вызывать метод каждые n секунд?

Я хочу сделать слайд-шоу с Swing и CardLayout, и каждые n секунд должно отображаться другое изображение, вызывающее другой метод

Ответы [ 3 ]

4 голосов
/ 07 июня 2010

Поскольку вы используете Swing, вы хотели бы использовать для этого javax.swing.Timer. Вот учебник Sun по теме .

4 голосов
/ 07 июня 2010
import java.util.*;

class MyTimer extends TimerTask
{
  public void run()
  {
    //change image
  }
}

тогда в своей главной вы можете запланировать задачу:

Timer t = new Timer();
t.schedule(new MyTimer(), 0, 5000);

первый номер - начальная задержка, второй - время между вызовами на run() вашего TimerTask: 5000 - 5 секунд.

Как отметил BalusC, вы обычно отправляете изменения свинга в поток событий AWT. По этой простой причине это не должно создавать проблем при смене фона из внешнего потока, в любом случае вы должны использовать

public static void SwingUtilities.invokeLater(Runnable whatToExecute)

чтобы отправить ваши изменения в нужную ветку.

Если вы предпочитаете подход BalusC, просто используйте ActionListener:

public void BackgroundChange implements ActionListener
{
  public void actionPerformed(ActionEvent e)
  {
    //change bg
  }
}

javax.swing.Timer t = new javax.swing.Timer(5000, new BackgroundChange());

Они оба предоставляют одинаковую функциональность, но этот уже готов для совместной работы с потоками Swing, поддерживающими совместимость и избегающими странных проблем с синхронизацией.

0 голосов
/ 08 июня 2010

Для более чем простой анимации в приложении Swing, проверьте Trident: http://kenai.com/projects/trident/pages/Home

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