Bonjour,

J'ai essayé de faire une barre de de progression en partant du code donné dans la FAQ, mais cela ne marche pas correctement.

En fait mon problème c'est que la barre de progression s'affiche et se rempli une fois que le chargement est fini.
Donc je suppose que cela doit venir d'un problème de Thread.

Mais je ne comprends pas très bien ce que je devrais faire pour que ça marche...

En gros ce que j'ai fait, c'est que j'ai remplacé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public void longTraitement ()
	{	// execute la succession d'operation ... 
		// on est plus dans le processus d'evenement mais dans le nouveau Thread
		for (int i = 0; i < 100; i++)
		{	this.uneOperation ();
			// maintenant on appelle la methode pour mettre a jour la barre
			// de progression
			this.majProgress (); 
		}
	}
par :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
public void longTraitement (){
		projet.attribuerId();
 
		String s1 = "INSERT INTO Projet (nom, fait) "
			+ "VALUES ('" + projet.getNom() + "'," + projet.isFait()+");";
		try{
			Statement state = Elements.bdd.link.createStatement();
			if (state.executeUpdate(s1) == 1) {
				for(int i=0;i<projet.getBaies().size(); i++){
 
					projet.getBaies().get(i).ajouterBDD(projet.getId());
this.majProgress();
 
				}
			}else{
				state.close();
				JOptionPane
				.showMessageDialog(null, "L'ajout de " + projet.getNom()
						+ " a échoué", "Attention",
						JOptionPane.WARNING_MESSAGE);
			}
		}catch (SQLException e){
			e.printStackTrace();
		}
	}
donc en gros, mon opération de base c'est projet.getBaies().get(i).ajouterBDD(projet.getId());
qui ajoute un élément Baie dans ma BDD
et suite à cette opération de base je met à jour la barre de chargement.

Au moment où je charge mes baie,

je fais

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
chargement = new BarreDeChargement(this.getBaies().size(), this);
chargement.lanceLongTraitement();
avec this une instance de la classe Projet (c'est le projet dont je parle plus haut dans projet.attribuerId();

Pour finir, cette barre de chargement est insérée dans un JDialog, dont voici le début de la classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
public class BarreDeChargement extends JDialog implements  Runnable {
 
	//Variables
	public static JProgressBar progress;
	public static int value = 0;
	private Projet projet;
 
	//Constructeur
	public BarreDeChargement(int nbOperation, Projet p) {
		super ();
		this.projet = p;
		progress = new JProgressBar (0, nbOperation);
		progress.setStringPainted (true);
		this.add (progress);
		this.setVisible (true);
		this.setSize(new Dimension(300, 100));
	}
Avez vous une idée de ce qui cloche?

Merci d'avance.