2010-06-04 5 views

Répondre

1

Assurez-vous que vous ne monopolisez pas le fil d'interface utilisateur pour cela. Si vous exécutez cette boucle dans le thread UI, l'événement repaint ne sera jamais distribué.

Une autre note; sleep est une méthode statique qui doit être appelée Thread.sleep(...). (Il n'y a aucun moyen de faire thatThread.sleep(...) de toute façon.)

La "bonne" manière de faire est probablement d'utiliser un SwingWorker. Jetez un oeil à the tutorial.

Si vous fournissez plus de code, nous pouvons fournir de meilleures réponses.

9

Je vous conseille d'utiliser un javax.swing.Timer pour ce problème, qui déclenchera périodiquement un ActionEvent sur le thread Event Dispatch (notez que vous devez seulement appeler repeindre et/ou manipuler les composants Swing de ce thread). Vous pouvez ensuite définir un ActionListener pour intercepter l'événement et repeindre votre composant à ce stade.

Exemple

JComponent myComponent = ... 
int delay = 1000; //milliseconds 

ActionListener taskPerformer = new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
    myComponent.repaint(); 
    } 
}; 

new Timer(delay, taskPerformer).start(); 

Notez également que SwingWorker est probablement inappropriée comme il est généralement utilisé pour les tâches de fond qui ont un début et une fin, plutôt que d'une tâche périodique.

+0

semble fonctionner, mais comment puis-je arrêter ce minuteur? –

+1

Avez-vous lu l'API pour la classe Timer? Je pense que la méthode à utiliser est évidente. – camickr

Questions connexes