Java 在指定的时间调用方法
如何每n秒调用一个方法 我想用Swing和CardLayout每n秒做一次幻灯片放映 它必须显示调用不同方法的不同图像Java 在指定的时间调用方法,java,swing,timer,Java,Swing,Timer,如何每n秒调用一个方法 我想用Swing和CardLayout每n秒做一次幻灯片放映 它必须显示调用不同方法的不同图像 import java.util.*; class MyTimer extends TimerTask { public void run() { //change image } } 然后,您可以在主菜单中安排任务: Timer t = new Timer(); t.schedule(new MyTimer(), 0, 5000); 第一个数字是初始
import java.util.*;
class MyTimer extends TimerTask
{
public void run()
{
//change image
}
}
然后,您可以在主菜单中安排任务:
Timer t = new Timer();
t.schedule(new MyTimer(), 0, 5000);
第一个数字是初始延迟,第二个是调用TimerTask
的run()
之间的时间:5000是5秒
正如BalusC所指出的,通常在AWT事件线程上分派swing更改。在这个简单的原因中,当从外部线程更改背景时,它不应该产生问题,在任何情况下,您都应该使用
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线程一起工作,以保持兼容性并避免奇怪的同步问题
然后,您可以在主菜单中安排任务:
Timer t = new Timer();
t.schedule(new MyTimer(), 0, 5000);
第一个数字是初始延迟,第二个是调用TimerTask
的run()
之间的时间:5000是5秒
正如BalusC所指出的,通常在AWT事件线程上分派swing更改。在这个简单的原因中,当从外部线程更改背景时,它不应该产生问题,在任何情况下,您都应该使用
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线程一起工作,以保持兼容性并避免奇怪的同步问题。因为您使用的是Swing,所以您希望使用它。这里有一个。因为您使用的是Swing,所以您希望使用它。这里有一个。对于Swing应用程序中的任何非平凡动画,请查看Trident:对于Swing应用程序中的任何非平凡动画,请查看Trident:您推荐的是
java.util.Timer
,而不是javax.Swing.Timer
。我在类似于此的任务中多次使用它,它始终有效。。顺便说一句,如果你喜欢swing定时器,你只需修改使用swing样式ActionListener实现背景更改的方法。swing时,始终使用javax.swing.TimerIt将在swing应用程序“始终”工作时“始终”工作。但是当它无法恢复地崩溃时,线程可能仍然挂在后台并暂停JVM。您推荐的是java.util.Timer
,而不是javax.swing.Timer
。我在类似于此的任务中多次使用它,而且它始终有效。。顺便说一句,如果你喜欢swing定时器,你只需修改使用swing样式ActionListener实现背景更改的方法。swing时,始终使用javax.swing.TimerIt将在swing应用程序“始终”工作时“始终”工作。但是,当它发生无法恢复的崩溃时,线程可能仍然挂起在后台并暂停JVM。