Таймер свинга истекает раньше, чем ожидалось - PullRequest
0 голосов
/ 29 ноября 2009

У меня есть модуль, который заставляет Swing Timer активироваться через 3 минуты, и я вижу, что он срабатывает менее чем через 2 минуты. Я должен упомянуть, что в ожидании таймера продолжались обширные Swing-операции и использовались другие Swing-таймеры в разных потоках. Может ли такая деятельность повлиять на время Таймера?

Ответы [ 2 ]

1 голос
/ 28 февраля 2010

Да, это может определенно помешать.

Если у вас много запланированных действий, вам, скорее всего, лучше использовать 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.

1 голос
/ 04 декабря 2009

В этой статье не рекомендуется использовать большое количество таймеров поворота. http://java.sun.com/products/jfc/tsc/articles/timer/

Я надеюсь, что это чтение поможет вам.

...