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é :
par :
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 (); } }
donc en gros, mon opération de base c'est projet.getBaies().get(i).ajouterBDD(projet.getId());
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(); } }
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
avec this une instance de la classe Projet (c'est le projet dont je parle plus haut dans projet.attribuerId();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 chargement = new BarreDeChargement(this.getBaies().size(), this); chargement.lanceLongTraitement();
Pour finir, cette barre de chargement est insérée dans un JDialog, dont voici le début de la classe :
Avez vous une idée de ce qui cloche?
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)); }
Merci d'avance.
Partager