SwingWorker
est utilisé aux fins suivantes:Java - Différence entre SwingWorker et SwingUtilities.invokeLater()
- Pour l'exécution des tâches en cours d'exécution à long dans un autre thread de manière à empêcher l'interface graphique d'être insensible
- Pour mettre à jour l'interface utilisateur graphique avec les résultats produits par la tâche de longue durée à la fin de la tâche via la méthode
done()
. - Pour mettre à jour GUI de temps en temps avec les résultats intermédiaires produits et publiés par la tâche à l'aide des méthodes
publish()
etprocess()
.
SwingUtilities.invokeLater()
peut effectuer les tâches ci-dessus comme suit:
- Au lieu d'exécuter
SwingWorker.execute()
méthode de l'EDT, nous pouvons exécuterExecutorService.submit(new MyRunnable())
car il permettra également de créer un autre thread qui peut exécuter la tâche de longue durée. - Pour la mise à jour GUI à la fin de la tâche, nous pouvons mettre du code (écrit en
done()
méthode de case1)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
à la fin de la tâche. - GUI mise à jour au milieu de la tâche, nous pouvons mettre le code (écrit en
process()
méthode de affaire1)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
à l'endroit où nous avons appelé méthodepublish()
dans affaire1.
Je pose cette question parce que le problème spécifié en question Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT peut être résolu par SwingUtilities.invokeLater()
mais ne peut pas être résolu avec SwingWorker
Je ne suis pas tout à fait sûr de ce que la 'question' est. – akf
@akf si vous n'êtes pas sûr, alors laissez-le. Simple :) –
Le problème auquel vous faites référence est résolu en utilisant SwingWorker. Voyez ma réponse là-bas. –