gpt4 book ai didi

java - 如何使用计时器以两个不同的间隔/持续时间执行两个不同的操作?

转载 作者:行者123 更新时间:2023-12-01 14:12:29 26 4
gpt4 key购买 nike

我将演示我想要使用代码实现的目标。

创建计时器引用计时器计时器;

构造并初始化计时器

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
}
};

寻求的场景:

  • action_1 与 action_2 的持续时间不同
  • 在持续时间内执行操作_1(例如持续时间_1)
  • 在持续时间 _1 内完成操作_1 后
  • 在持续时间 _2 内执行操作_2
  • 在持续时间 _2 内完成操作_2 后
  • 在持续时间_1内执行操作_1
  • 等等。

  • action_1 仅在 action_2 完成其间隔后才执行其后续间隔。

  • action_2 仅在 action_1 完成其间隔后才执行其后续间隔。

用示例来描述:让我们采取这些行动

       jlabel.setText("A"); //action_1

jlabel.setText("B"); // action_2
  • action_1 与 action_2 的持续时间不同
  • action_1:将文本设置为“A”,持续时间 1 秒。
  • 执行 action_1 1 秒后
  • action_2:将文本设置为“B”,持续时间 2 秒
  • 执行 action_2 2 秒后
  • action_1:将文本设置为“A”,持续时间 1 秒
  • 等等。

  • action_1 仅在 action_2 完成其间隔后才执行其后续间隔。

  • action_2 仅在 action_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);
}
}

关于java - 如何使用计时器以两个不同的间隔/持续时间执行两个不同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18388713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com