在指定时间调用方法

时间:2010-06-07 13:06:39

标签: java swing timer

如何每隔n秒调用一次方法?

我希望每隔n秒用Swing和CardLayout进行幻灯片放映 它必须显示一个不同的图像调用不同的方法

3 个答案:

答案 0 :(得分:4)

import java.util.*;

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

然后在你的主要任务中安排任务:

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

第一个数字是初始延迟,第二个是您run():5000的TimerTask之间的时间是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线程一起工作,保持兼容性并避免奇怪的同步问题。

答案 1 :(得分:4)

由于您使用的是Swing,因此您希望使用javax.swing.Timer。这是一个Sun tutorial on the subject

答案 2 :(得分:0)

对于Swing应用程序中的任何琐碎动画,请查看Trident:http://kenai.com/projects/trident/pages/Home