JProgressBar et bloquer la suite de mon programme
Bonjour,
Je dois télécharger des fichiers sur internet. Donc j'ai décidé d'y insérer une petite barre de progression pour indiquer à l'utilisateur que le logiciel n'a pas planté mais qu'il travail ^^
Le problème est que quand la barre de progression est là et bien mon programme continue de tourner, ce qui pose problème car il n'a pas récupéré tous les fichiers pour pouvoir fonctionner correctement !
J'ai voulu essayer de "bloquer" le Task avec task.get(); (à côté de task.execute() qui appelle le doInBackGround() ) mais du coup la barre de progression ne s'affiche plus ...
y a t'il un moyen d'interrompre la suite de mon programme sans bloquer cette fichue barre ?
Voici mon code :
Code:
1 2 3 4 5 6 7
|
// je crée ma barre de progression et je récupère les fichiers en même temps
BarProgress progressBar = new BarProgress(root, repertorySequences);
// normalement, une fois les fichiers téléchargés, je récupère une liste mais
// il me la récupère alors que le téléchargement n'est pas fini ... donc ça coince
List <Sequence> listSequence = progressBar.getListSequences(); |
Voici mon PropertyChange
Code:
1 2 3 4 5 6 7
|
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
}
} |
Ma classe Task (SwingWorker)
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
|
class Task extends SwingWorker<Void, Void> {
public Void doInBackground() throws IOException, SAXException {
int nbLeaves = root.calcLeafs();
List<PhyloNode> nodes = root.getAllLeaves(root);
int position = 0;
GenBankSequence genBank = new GenBankSequence();
this.setProgress(0);
while (position < nbLeaves && !isCancelled() && !isDone()) {
Sequence seq = GenBank.getOnlyAccessionNumber(nodes.get(position), repertorySequence, listSequences);
listSequences.add(seq); // je remplie la liste que je veux récupérer à la fin
position++;
this.setProgress((position*100)/nbLeaves);
System.err.println((position*100)/nbLeaves);
}
this.setProgress(100);
return null;
}
public void done(){
frame.dispose();
}
} |
Si quelqu'un pouvait m'aider je lui en serrais très reconnaissante ^^