cs_Mins
Messages postés9Date d'inscriptiondimanche 30 mars 2003StatutMembreDernière intervention28 mai 2009
-
28 mai 2009 à 16:50
kikilik
Messages postés26Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention27 janvier 2010
-
3 juin 2009 à 12:38
Bonjour à tous, j'ai un petit soucis avec une progressBar.
En fait, j'envoie dans une boucle While la taille que fait un fichier en téléchargement. et je tente ceci :
public void systemSetProgress(int taille) {
int pc = (int)((taille / tailleFinale) * 100);
jProgressBar1.setValue((int) pc);
tPc.setText(String.valueOf(taille)+" / "+String.valueOf(tailleFinale)+" = "+String.valueOf(pc));
if (pc == 100)
this.dispose();
}
Rien donc de bien bien compliqué.
Le label se met bien à jour en direct, donc on le voit bien qui défile.
Par contre pc, reste à 0 tant que taille et tailleFinale ne sont pas équivalents, et donc la progressbar passe de 0 à 100 quand c'est terminé. :(
cs_MoH008
Messages postés238Date d'inscriptionlundi 2 mars 2009StatutMembreDernière intervention29 septembre 20111 28 mai 2009 à 18:40
Salut,
j'ignore si c'est ce que je vais dire s'applique dans ton cas mais il ne faudrait pas attribuer un thread uniquement à ta progressbar ?
Si c'est de la prog séquentielle, les instructions s'effectuent les unes après les autres donc ton test d'égalité s'effectue seulement quand le téléchargement est terminé, non ? Il faudrait que les tâches s'effectuent silmutanément et non une après l'autre.
Juste pour ton téléchargement tu crés un thread pour la progressbar et le thread principal s'occupe du téléchargement....
En espérant que c'était ton problème!
The possible meet the impossible to become the possimpible !!
cs_Mins
Messages postés9Date d'inscriptiondimanche 30 mars 2003StatutMembreDernière intervention28 mai 2009 28 mai 2009 à 18:59
Je vais donner un peu plus de code pour que ce soit plus clair, mais en temps normal, effectivement, ça aurait pu être, mais dans ce cas ci, vu que le setText s'effectue, je ne comprends pas pourquoi la division ne s'effectue pas...
URL url = new URL(filePath);
//On crée une connection vers cet URL
connection = url.openConnection( );
//On récupère la taille du fichier
int length = connection.getContentLength();
progressBox.setTailleFinale(length);
//Si le fichier est inexistant, on lance une exception
if(length == -1){
throw new IOException("Fichier vide");
}
//On récupère le stream du fichier
is = new BufferedInputStream(connection.getInputStream());
//On prépare le tableau de bits pour les données du fichier
byte[] data = new byte[length];
//On déclare les variables pour se retrouver dans la lecture du fichier
int currentBit = 0;
int deplacement = 0;
//Tant que l'on n'est pas à la fin du fichier, on récupère des données
while(deplacement < length){
currentBit = is.read(data, deplacement, data.length-deplacement);
if(currentBit == -1)break;
deplacement += currentBit;
//long pc = deplacement / length * 100;
progressBox.systemSetProgress(deplacement);
}
kikilik
Messages postés26Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention27 janvier 20106 3 juin 2009 à 12:38
Pense à appliquer le Pattern Observer/Observable, à chaque fois qu'il y a changement sur la valeur de la barre, ta classe doit dériver de Observable,
tu spécifie qu'elle a changée avec
setChanged(); // confirmer changement
notifyObservers(int);//envois la valeur a l'observer
et là la classe implémentent Observer reçoit la valeur et met a jour l'affichage de la barre de progression, et ce grace a la methode
update(Observable o, Object arg) {
progressBox.systemSetProgress((int)arg);
}