2010-02-19 5 views
4

J'ai écrit un framework qui fait des calculs longs (environ 15 minutes). Je veux maintenant écrire une interface dans Swing qui rassemblera les données de la base de données et exécutera ces calculs.Java Swing long Thread execution

Je me demandais maintenant comment faire cette meilleure pratique? Si je fais des calculs intensifs dans le thread d'événement, l'interface entière se bloque jusqu'à ce que le code soit fini.

J'ai commencé à penser que je vais créer un objet qui peut gérer toutes les tâches de calcul, mais que faire avec les informations d'état sur la progression et le statut pendant l'exécution. J'ai également plusieurs actions qui peuvent être exécutées, par ex. différents calculs qui nécessitent des données différentes. Est-ce que vous devez écrire un objet pour chaque action? Si je sépare la vue et le calcul, je dois échanger les données - quelle est la meilleure pratique pour cela?

Merci et meilleures salutations

Marco

Répondre

2

Lisez la section du tutoriel Swing sur Concurrency pour un exemple sur l'utilisation d'un SwingWorker.

3

Jetez un oeil à SwingWorker (pour Java 6, mais il existe une version de bibliothèque que vous pouvez obtenir pour Java 5). Avec SwingWorker, vous exécutez votre méthode gourmande en temps au sein de la méthode doInBackground() et la méthode done() est appelée dans la file d'attente des événements lorsqu'elle se termine, ce qui vous permet de mettre à jour l'interface graphique. Il fournit également un moyen de notifier l'interface graphique de l'avancement pendant la tâche, si possible.

+0

Vous voulez expliquer le problème que vous avez avec cela, downvoter? – ColinD

+0

Merci, SwingWorker sonne vraiment interessant –

+0

+1 pour contrer le killjoy aléatoire. – reccles