2009-11-29 4 views
0

J'ai un module qui règle la minuterie d'oscillation au réveil après 3 minutes et je vois qu'elle est allumée après moins de 2 minutes. Je dois mentionner que pendant l'attente de la minuterie, de nombreuses activités Swing ont eu lieu et d'autres Swing Timers, sur des fils différents ont été utilisés. Une telle activité pourrait-elle affecter le timing de la minuterie?La minuterie d'oscillation expire plus tôt que prévu

Répondre

1

Cet article recommande de ne pas utiliser un grand nombre de minuteries d'oscillation.

J'espère que cette lecture peut vous aider.

1

Oui, il pourrait certainement interférer.

Si vous avez beaucoup d'activités planifiées, il est préférable d'utiliser un ScheduledThreadPoolExecutor pour planifier des tâches.

Pour vous assurer que le travail prévu est exécuté dans le thread Swing, vous pouvez utiliser un emballage comme celui-ci pour les Runnable s que vous planifiez:

public abstract SwingRunnable implements Runnable 
{ 
    public final void run() 
    { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() 
     { 
      public final void run() 
      { 
       runInSwing(); 
      } 
     } 
    } 

    protected abstract void runInSwing(); 
} 

Encore mieux (si vous savez ce que vous 're doing ;-)), vous ne pouvez mettre que les parties de votre travail programmé qui besoin d'être exécuté dans le thread Swing dans le thread Swing. Le code d'emballage que j'ai donné ici exécutera tous de votre code dans le thread Swing, ce qui est le même que ce que vous faites actuellement en utilisant javax.swing.Timer.

Questions connexes