[Java - applet] paint() dans thread

Fermé
ouckileou Messages postés 16 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 29 juillet 2007 - 21 avril 2005 à 01:49
michaelknight00 Messages postés 56 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 9 juin 2008 - 23 nov. 2007 à 14:56
Bonjour à tous

voilà j'ai implémenté un algo génétique, pour le problème du voyageur de commerce
des points, et on cherche le plus court chemin pour passer par tous ces points
bref ça ça marche, mais j'aimerai bien afficher en temps réel le meilleur chemin trouvé à un instant T.

J'ai donc ma classe Genetique qui fait toutes les manipulations de recherche, et ma classe principale AppliGenetique, une applet, censée afficher tout ça

voici le code de celle-ci :
j'ai viré plein de trucs car tout marche à l'exception d'une chose donc je n'ai gardé que la structure

package genetiques;

import org.jdom.*;
//...etc

public class AppliGenetique extends Applet implements Runnable {

	private Genetique genetique;
	private Carte carte;
	private Thread tr;

	public void init() {
		chargerCarte("../structure.xml");
		genetique = new Genetique(carte);

		// création du thread qui va rafraichir l'applet
		if (tr == null) {
			try  { tr = new Thread(this); }
				catch (Exception e)  { }
		}
	}
	// démarrage de l'applet
	public void start() {
		tr.start(); // démarrage du thread
		genetique.chercherSolution(); // lancement de la recherche par algo génétique
		tr.stop();
	}
	// affichage des points de la carte et des chemins qui les relient
	public void paint(Graphics g) {
		System.out.println("paint();");
		// affichage des points
		// affichage des chemins
	}
	public void run() {
		while (true) {
			System.out.println("run();");
			try { this.repaint(); }
				catch(Exception e){ }
		}
	}
	// crée la carte depuis le XML
	public void chargerCarte(String fichier) {final org.jdom.Document document_loc;
		// corps de la méthode
	}
}


problème : bien que j'appelle la méthode repaint() dans mon thread, donc théoriquement en permanence, l'affichage ne se fait qu'à la fin, qu'une fois !

vous voyez que j'ai mis des traces dans paint() et run()
la méthode chercherSolution() affiche des infos une fois qu'elle a terminé.

J'ai donc dans la console :
[console]
run()
run()
run() //... etc ( ce qui prouve que mon thread tourne)
les infos renvoyées par chercherSolution()
et ensuite : paint() // -> mon chemin est affiché
[console]

alors que je voudrais avoir
[console]
run()
paint()
run()
paint()
run()
paint() //... etc
les infos renvoyées par chercherSolution()
et un dernier paint()
[console]

alors il y a surement une bonne raison à ça mais là je ne vois pas du tout donc si quelqu'un peut m'aiguiller ce serait très sympa

j'ai essayé plusieurs combinaisons, placer dans start(), dans init()...

j'avoue que le dessin en Java j'ai un peu de mal...

merci d'avance :)
A voir également:

2 réponses

ouckileou Messages postés 16 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 29 juillet 2007
5 mai 2005 à 21:43
bon, au cas où ça intéresserait quelqu'un, j'ai trouvé :

il suffisait de créer 2 Threads, 1 pour la recherche par algo génétique, l'autre pour l'affichage
0
michaelknight00 Messages postés 56 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 9 juin 2008 4
23 nov. 2007 à 14:56
Bonjour, je travaille actuellement sur les algos génétiques en java. Je voulais savoir si tu accepterais de me communiquer ton programme pr m'aider ds mon travail ?

Merci d'avance :)
0