【发布时间】:2020-04-23 11:20:15
【问题描述】:
我有一个来自 javax.swing.Timer 的 Timer 实例,我正在尝试计算冷却时间的剩余时间,因为我将它用于命令。
我正在测试它有 15 秒的冷却时间。冷却时间很好,但我希望能够发布当我进入更大的冷却时间(如 5 - 10 分钟等)时还剩多少时间。 我想说像 00:00:15 剩余时间 00:00:14 剩余时间 00:00:13 剩余时间 等等
我知道我在这里遗漏了一些东西。
下面我放了我用来计算经过时间和从 Millis 到 HMS 的转换的代码 调用命令时,开始时间设置为 currentTimeMillis()
long startTime = System.currentTimeMillis();
public void callWithCooldown(int cooldown) {
ActionListener callMethod = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
enable();
}
};
boolean didCall = call();
if(!didCall) return;
disable();
this.timer = new Timer(cooldown, callMethod);
timer.setRepeats(false);
this.startTime = System.currentTimeMillis();
timer.start();
String notification = "Cooldown activated for " + MathHelper.millisecondsToHMS(cooldown) + "!";
System.out.println(notification);
notify(notification);
}
public String elapsedTime() {
long now = System.currentTimeMillis();
long endTime = (startTime + cooldown);
int elapsed = (int) (endTime - now);
System.out.println(elapsed);
return millisecondsToHMS(Math.abs(elapsed));
}
public static String millisecondsToHMS(int milliseconds) {
String time = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(milliseconds),
TimeUnit.MILLISECONDS.toMinutes(milliseconds) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(milliseconds)),
TimeUnit.MILLISECONDS.toSeconds(milliseconds) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(milliseconds)));
return time;
}
【问题讨论】:
-
真正的问题是什么?
-
然后使用带有 1 秒 更新的计时器。
-
我无法让它正确地告诉我还剩多少时间。理想情况下不需要使用第二个计时器
-
经过的时间只是返回“剩余00:00:15!”转换为 HMS 后没有其他内容。
-
请添加minimal reproducible example,包含输入、预期和观察到的输出。