fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008
-
26 févr. 2008 à 15:45
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008
-
27 févr. 2008 à 12:38
Bonjour, je fais un petit programme de sauvegarde.
Pendant la copie de fichier j'aimerais faire progresser ma JProgressBar.
Lorsque j'imprime les valeurs de progression, je vois bien les bonnes valeurs apparaitre au bon moment.
Mais la JProgressBar ne bouge pas et seulement une fois la copie terminé, la barre se rempli d'un coup...
Voici la methode qui parcour le dossier :
public void listeRepertoire(File repertoire,File destination, OngletUn o1) {
<strike> /* on vérifié si c'est un repertoire*/ </strike>
if ( repertoire.isDirectory ( ) ) {
File[] list = repertoire.listFiles();
<strike> /* si le repertoire n'est pas vide*/</strike>
if (list != null){
for ( int i = 0; i < list.length; i++) {
<strike>/* on créé le dossier de destination*/</strike>
File fichier = new File(destination.getAbsolutePath()+"/"+repertoire.getName());
fichier.mkdir();
<strike> /* Appel récursif sur les sous-répertoires */</strike>
listeRepertoire( list[i],fichier,o1);
}
}
else {
System.err.println(repertoire + " : Erreur de lecture.");
}
}
<strike> /* si ce n'est pas un repertoire on copie le fichier*/</strike>
else{
try {
<strike> /* on crée le fichier de destination*/</strike>
File fichier = new File(destination.getAbsolutePath()+"/"+repertoire.getName());
fichier.createNewFile();
<strike> /* calcul de la progression de la barre */</strike>
prog=prog+repertoire.length();
progression = (int)(prog*100/dossier);
System.out.println("t : "+progression);
<strike> /* changement valeur de la JProgressBar*/</strike>
o1.jpb1.setValue(progression);
<strike> /* copie du fichier source veres fichier destination*/</strike>
[auteur/LAURENT1024/523332.aspx laurent1024]
a raison, il ne faut pas bloquer l'Event Dispatch Thread, c'est écrit dans la documentation de Swing. Si vous le bloquez, votre interface graphique ne répond plus tant que le traitement long n'est pas terminé. Allez voir du côté des threads et de la classe SwingWorker, vous trouverez aussi des exemples dans la documentation Java :
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 27 févr. 2008 à 09:45
Salut:
Il vaut mieux utiliser la classe ProgressMonitor car elle est adaptée à ce genre de tâches.
Sinon, un simple JProgressBar combiné avec la classe SwingWorker fera l'affaire avec perfection.
<hr size="2" width="100%" />[Félicité de Lamennais] Le plus puissant de tous les leviers, c'est la volonté.
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 27 févr. 2008 à 12:38
Enfin !!!
Ca y est j'ai reussi !!! merci !
C'était bien une histoire de thread, mais j'y comprennais pas grand chose.
j'ai été voir cette petite explication :