我在这里学习了Java程序 https://www.utdallas.edu/~dheroy/4331code/book/ImageAudioAnimation.java
我注意到这个程序存在缺陷
private int[] delays =
{48000, 54000, 59000, 54000, 59000, 31000, 68000};
private Timer timer = new Timer(delays[0], new TimerListener());
计时器初始化为延迟值[0]( 48000 ) 现在计时器在整个程序中都停留在此位置。甚至在我们调用这行代码之后
timer.setDelay(delays[index]);
我正在尝试重写这个程序,让它做它想做的事情。我坚持让这个计时器从初始化时更改。自2012年以来,我没有在Java中工作过多,所以我对它有点生疏,特别是它的GUI方面。
我应该抛弃计时器对象并提出另一种跟踪已用时间的方法吗?
答案 0 :(得分:3)
你需要做两件事:
您可以像这样设置极低的延迟:
timer.setInitialDelay(5);
timer.setDelay(5);
timer.restart();
答案 1 :(得分:2)
引用docs:
Swing计时器(javax.swing.Timer的一个实例)触发一个或多个 指定延迟后的动作事件。不要混淆Swing计时器 使用java.util包中的通用计时器工具。这个 页面仅描述Swing计时器。
一般情况下,我们建议使用Swing计时器而不是 用于GUI相关任务的通用计时器,因为Swing计时器全部 共享相同的,预先存在的计时器线程和GUI相关的任务 自动在事件派发线程上执行。但是,你 如果你不打算触摸,可能会使用通用计时器 来自计时器的GUI,或者需要执行冗长的处理。
Bottomline,如果你的javax.swing.Timer
对GUI产生影响,请继续使用它。
否则,您可能需要调查ScheduledThreadPoolExecutor。
针对您的特定变量延迟问题,您可以参考API:
[调用
setDelay
]不会影响初始延迟属性, 可以通过setInitialDelay
方法设置。