【发布时间】:2020-12-01 08:13:14
【问题描述】:
我有一个 Java Swing 组件,它每 1 分钟打印一次“hello”。
timer = new Timer();
timer.schedule(new HelloWordTask(), TIME, TIME);
但是,我想在用户移动鼠标时重置 timertask。
int count = 0;
private CustomMouseAction extends MouseAdapter {
@Override
public void mouseMoved(MouseEvent e) {
timer.cancel();
timer = new Timer();
timer.schedule(new HelloWordTask(), TIME, TIME);
System.out.println("moved " + count++);
}
}
每当我移动鼠标时,我的计时器都会重新安排,这是预期的行为。但是,这意味着为每个“位”运动创建新的计时器。例如,当我将鼠标移动 5 厘米左右时,会显示约 30 条打印语句。
有没有办法让程序更有效率?此外,是否有可能以某种方式“降低”mouseMoved 检测率?例如,我可以让它只被调用 10 次而不是被调用 30 次(我假设如果这是可能的,那么有很小的机会错过刷新机会)。
【问题讨论】:
-
首先,
java.util.Timer可能不是最好的解决方案,您可以考虑改用java.swing.Timer。接下来,您可以在mouseMoved中有一个计数器,它仅在超过给定阈值时重置计时器 - 甚至第二个Timer将在指定延迟后触发第一个,但不会运行重置
标签: java swing mouseevent timertask