[JProgressBar] Mauvaise incrémentation pendant traitement
Bonjour,
Je suis entrain de réaliser une application necéssitant un traitement qui peut être assez long. Pour connaître le nombre de traitement effectuer et encore restants, j'utilise une JProgressBar.
Voici un algorithme de ce traitement :
DEBUT
Définir la valeur max du JProgressBar et la mettre à 0
POUR CHAQUE traitements à effectuer (avec X : int)
--> les deux lignes ci-dessous sont dans une boucle FOR
Lancer X threads pour traiter X traitements à la fois
Incrémenter la JProgressBar de 1 x X
--> les lignes ci-dessous sont dans une boucle FOR
Attendre la fin des X threads
FIN POUR
FIN
Voici le code réalisant cet algorithme
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public void startReader() {
threadProgress = new Thread(this);
threadProgress.start();
}
public void run() {
vectorRSSFeeds = rssFeeds.getRSSFeeds();
jProgressBarProcess.setMaximum(vectorRSSFeeds.size());
jProgressBarProcess.setValue(0);
int nbThreads = 0;
// POUR CHAQUE flux RSS
for(int i = 0; i < vectorRSSFeeds.size(); i++) {
// Vider le vecteur de threads
vectorThreads.clear();
// Déterminer le nombre de threads à créer
nbThreads = this.NB_THREADS;
if(nbThreads > vectorRSSFeeds.size() - i) nbThreads = vectorRSSFeeds.size() - i;
// Création des threads
for(int j = 0; j < nbThreads; j++, i++) {
vectorThreads.add(new ThreadURL(vectorRSSFeeds.get(j).getUrl())); // Classe héritant de Thread
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jProgressBarProcess.setValue(jProgressBarProcess.getValue() + 1);
System.out.println("--> " + Integer.toString(jProgressBarProcess.getValue()));
}
});
System.out.println(">> " + Integer.toString(i) + " - " + vectorThreads.get(j).getURL().getUrl());
vectorThreads.get(j).start();
try {
vectorThreads.get(j).sleep(10);
}
catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
// Attendre la fin du traitement des threads créés
for(int j = 0; j < nbThreads; j++) {
try {
System.out.println("<< " + Integer.toString(i) + " - " + vectorThreads.get(j).getURL().getUrl());
vectorThreads.get(j).join();
}
catch(InterruptedException e) {
System.err.println(e.getMessage());
}
}
}
} |
Normalement, si j'ai 50 traitements, je devrais avoir une barre de progression allant de 0 à 50, mais j'ai l'impression que des étapes sont sautées (uniquement au niveau de la JProgressBar, car les ThreadURL fonctionnent très bien)
Voici un exemple pour un dizaine traitement :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| >> 0 - http://www.lefigaro.fr/rss/figaro_international.xml
>> 1 - http://presence -pc.com/ppcrss.xml
--> 1
--> 2
<< 2 - http://www.lefigaro.fr/rss/figaro_international.xml
<< 2 - http://presence -pc.com/ppcrss.xml
>> 3 - http://www.lefigaro.fr/rss/figaro_international.xml
--> 3
>> 4 - http://presence -pc.com/ppcrss.xml
--> 4
<< 5 - http://www.lefigaro.fr/rss/figaro_international.xml
<< 5 - http://presence -pc.com/ppcrss.xml
>> 6 - http://www.lefigaro.fr/rss/figaro_international.xml
--> 5
>> 7 - http://presence -pc.com/ppcrss.xml
--> 6
<< 8 - http://www.lefigaro.fr/rss/figaro_international.xml
<< 8 - http://presence -pc.com/ppcrss.xml
>> 9 - http://www.lefigaro.fr/rss/figaro_international.xml
--> 7
<< 10 - http://www.lefigaro.fr/rss/figaro_international.xml |
Avec ">>" pour le début d'un traitement, "<<" pour la fin d'un traitement et "-->" pour la position de la JProgressBar.
Savez-vous comment faire pour que ma JProgressBar s'incrémente correctement du nombre de traitement ?
Merci