Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在指定的时间调用方法_Java_Swing_Timer - Fatal编程技术网

Java 在指定的时间调用方法

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); 第一个数字是初始

如何每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);
第一个数字是初始延迟,第二个是调用
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。