JProgressBar affichage différé
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:
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:
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:
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:
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.