我有一个模块设置Swing Timer在3分钟后唤醒,我发现它在不到2分钟后被触发。 我必须提到,在等待Timer时,广泛的Swing活动继续进行,并且使用了不同线程上的其他Swing Timers。 这样的活动会影响Timer的时间吗?
答案 0 :(得分:1)
本文建议不要使用大量摆动计时器。 http://java.sun.com/products/jfc/tsc/articles/timer/
我希望这篇阅读可以帮助你。
答案 1 :(得分:1)
是的,它肯定会干扰。
如果您正在进行大量计划活动,那么最好使用ScheduledThreadPoolExecutor来安排任务。
为了确保在Swing线程中执行计划的工作,您可以为您安排的Runnable
使用这样的包装器:
public abstract SwingRunnable implements Runnable
{
public final void run()
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public final void run()
{
runInSwing();
}
}
}
protected abstract void runInSwing();
}
更好(如果你知道你正在做什么;-)),你只能将实际需要的预定工作部分在Swing线程中执行到Swing线程中。我在这里给出的包装器代码将在Swing线程中运行所有代码,这与您当前使用javax.swing.Timer
进行的操作相同。