Ma question concerne le multi-threading en Java. Je suis en train de traduire une application que j'ai écrite en Visual Basic 2008 en Java. Il existe une classe en VB appelée BackgroundWorker, qui permet au codeur d'effectuer une tâche sur un autre thread, un peu comme en Java. La seule différence distincte est que, avec le thread BackgroundWorker
est run()
, il déclenche un événement appelé DoWork()
sur la ligne principale qui contient le code à exécuter en arrière-plan. En outre, après l'exécution du code, un événement RunWorkerCompleted()
est renvoyé sur le thread de premier plan pour interpréter les résultats.Lancement d'un événement mainline à partir d'un thread d'arrière-plan en Java
J'ai trouvé l'installation BackgroundWorker
assez utile et il semble un peu plus souple que SwingWorker
et je me demandais juste s'il était possible (et acceptable) de déclencher des événements de la même manière en Java? Et si oui, comment pourrais-je y aller? Comme je n'ai effectué qu'un balayage rapide sur SwingWorker
, il est possible qu'il ait une fonctionnalité similaire qui fonctionne aussi bien, auquel cas je serais heureux de le savoir à la place.
Cheers,
Hoopla
EDIT:
Kewl. Bravo les gars, merci pour les réponses rapides, et les excuses pour ma réponse plutôt laxiste. Je vais donner votre idée à Oscar, désolé coobird, je n'ai pas tout à fait suivi - toute autre explication serait la bienvenue (peut-être un exemple). Juste pour récapituler: Je veux avoir une classe exécutable, que j'instancie une instance de dans mon code. La classe runnable a deux événements, dont l'un est tiré du thread d'arrière-plan et contient le code à exécuter en arrière-plan (DoWork()
), et l'autre événement est déclenché sur le thread de premier plan après que le thread d'arrière-plan a terminé sa tâche (RunWorkerCompleted()
) .
Et si je comprends bien vos conseils correctement, je peux tirer l'événement DoWork()
de la classe runnable méthode run()
de sorte qu'il sera exécuté sur le thread d'arrière-plan, puis je peux utiliser la méthode SwingUtilities.invokeLater()
pour déclencher l'événement RunWorkerCompleted()
sur le fil de premier plan, une fois le thread d'arrière-plan a terminé l'exécution.
Oui?
Yeap PROMETTEURS – OscarRyz