Bonjour a tous,
Je suis actuellement en train de finaliser un projet lié consistant a implémenter un algorithme génétique pour le problème du voyageur de commerce. L'algorithme est appliqué a un espace de 25 villes du monde. Je souhaitais a présent ajouter une gui permettant de régler les paramètres de l'algorithme, et pouvant afficher de façon graphique le trajet trouvé. J'exécute mon algorithme génétique, récupère le meilleur trajet trouvé, puis convertis les coordonnées (latitude / longitude) des villes par un service web fourni par Yahoo avant de les afficher. Seulement, le temps de déroulement de l'algorithme génétique et la récupération des coordonnées est "important" (une dizaine de secondes).
Je souhaite donc faire en sorte que ce processus ne bloque pas le Gui, et affiche un avancement a l'utilisateur. Mon algorithme génétique ayant été codé comme une boite noire (je lance une méthode et obtiens le résultat final une fois tous les traitements effectués), j'ai procédé de la façon suivante pour obtenir l'avancement du processus :
- Créé un nouveau SwingWorker dans l'événement lançant l'AG
- Surchargé sa méthode doInBackground : j'y crée 2 threads : l'un lance le long processus, l'autre vérifie a intervalles réguliers son avancement (via un getter sur la longue tache) et publish cet avancement
- Surchargé sa méthode process qui récupère donc régulièrement l'avancement de la méthode "publié" dans le second thread de doInBackground, et met a jour l'interface
Mon approche est-elle correcte ? Elle semble fonctionner, mais y a-t-il des choses auxquelles je dois être particulièrement attentif ? En termes de threads, j'ai surtout eu des cours théoriques, et peut-être un TP dessus l'an dernier, autant dire qu'il y a sans aucun doute des choses auxquelles je ne fais pas attention, c'est ce que j'aurais aime confirmer ou infirmer
Merci de votre aide
PS : je joins un exemple simplifie de ce que mon implémentation peut donner
Partager