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, поддерживающими совместимость и избегающими странных проблем с синхронизацией.