2009-11-29 37 views
0

我有一個模塊,它將Swing Timer設置爲在3分鐘後喚醒,並且我看到它在不到2分鐘後才被觸發。 我不得不提及,在等待定時器時,廣泛的Swing活動繼續進行,其他Swing定時器在不同的線程上被使用。 這樣的活動會影響計時器的計時嗎?Swing Timer比預期早到期

回答

1

本文不推薦使用大量的擺動定時器。

我希望這篇文章能幫助你。

1

是的,它肯定會干擾。

如果您有很多正在進行的計劃活動,則最好使用ScheduledThreadPoolExecutor來計劃任務。

爲了確保該計劃的工作是在Swing線程中執行的,可以使用的包裝像這樣爲您安排Runnable S:

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進行的操作相同。