Swing Timer比预期更早到期

时间:2009-11-29 06:18:45

标签: swing timer

我有一个模块设置Swing Timer在3分钟后唤醒,我发现它在不到2分钟后被触发。 我必须提到,在等待Timer时,广泛的Swing活动继续进行,并且使用了不同线程上的其他Swing Timers。 这样的活动会影响Timer的时间吗?

2 个答案:

答案 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进行的操作相同。