Java 如何使用计时器以两种不同的间隔/持续时间执行两种不同的操作?
我将用代码演示我想要实现的目标 创建计时器引用Java 如何使用计时器以两种不同的间隔/持续时间执行两种不同的操作?,java,timer,Java,Timer,我将用代码演示我想要实现的目标 创建计时器引用 定时器 构造并初始化计时器 timer = new Timer(duration, timerAction); timer.start(); 现在timerListener AbstractAction timerAction = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) {
定时器代码>
构造并初始化计时器
timer = new Timer(duration, timerAction);
timer.start();
现在timerListener
AbstractAction timerAction = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
//Perform some action for duration
jlabel.setText("A"); //action_1
//See description under code
jlabel.setText("B"); // action_2
}
};
所寻求的情景:
- 操作_1的持续时间与操作_2的持续时间不同
- 在持续时间内执行操作1(如持续时间1)
- 在持续时间内完成行动1后
- 在持续时间内执行操作2
- 在持续时间内完成行动2后
- 在持续时间内执行操作\u 1
- 等等
- 动作_1仅在动作_2完成其间隔后才执行其后续间隔
- 动作_2仅在动作_1完成其间隔后才执行其后续间隔
举例说明:让我们采取以下行动
jlabel.setText("A"); //action_1
jlabel.setText("B"); // action_2
- 操作_1的持续时间与操作_2的持续时间不同
- 操作1:将文本设置为“A”,持续1秒
- 执行操作1 1秒后
- 操作2:将文本设置为“B”,持续2秒
- 执行动作2秒后
- 操作1:将文本设置为“A”,持续1秒
- 等等
- 动作_1仅在动作_2完成其间隔后才执行其后续间隔
- 动作_2仅在动作_1完成其间隔后才执行其后续间隔
关于如何实现它有什么想法吗?可能是这样的:
public class DoubleActionTimer {
private final Action action1;
private final Action action2;
private final int delay1;
private final int delay2;
private final Timer timer;
private DoubleActionTimer(Action action1, int delay1, Action action2, int delay2) {
this.timer = new Timer(delay1, new ActionSwitcher());
this.action1 = action1;
this.delay1 = delay1;
this.action2 = action2;
this.delay2 = delay2;
this.timer.setRepeats(false);
this.timer.start();
}
public void stop() {
this.timer.stop();
}
private class ActionSwitcher extends AbstractAction {
private boolean flag = false;
/**
* Invoked when an action occurs.
*/
@Override
public void actionPerformed(ActionEvent e) {
final Action action = flag?action2:action1;
final int delay = flag?delay1:delay2;
flag = !flag;
action.actionPerformed(e);
timer.setInitialDelay(delay);
timer.start();
}
}
public static void main(String[] args) throws InterruptedException {
final Action action1 = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action1"+new Date());
}
};
final Action action2 = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Action2 "+new Date());
}
};
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new DoubleActionTimer(action1, 500, action2, 3000);
}
});
TimeUnit.SECONDS.sleep(60);
}
}
持续时间是否必然与公共因素密切相关(例如,1秒和2秒),或者它们是否完全是随机的?不是随机的,动作_1和动作_2一个接一个地(顺序地)进行。一旦完成,随后的动作开始,每一个动作都有其指定的持续时间。谢谢