Progressbar dans un while

cs_Mins Messages postés 9 Date d'inscription dimanche 30 mars 2003 Statut Membre Dernière intervention 28 mai 2009 - 28 mai 2009 à 16:50
kikilik Messages postés 26 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 27 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é. :(

Quelqu'un aurait-il une idée ?

Merci.

Min's

5 réponses

cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
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 !!
0
cs_Mins Messages postés 9 Date d'inscription dimanche 30 mars 2003 Statut Membre Dernière intervention 28 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);
            }
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
28 mai 2009 à 20:18
Sur ce lien une task est utilisée qui fait appel à un thread en background je t'ai dis. Peut être que cela t'aidera

The possible meet the impossible to become the possimpible !!
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
28 mai 2009 à 20:20
sinon ta un pti tuto sur ce site même

The possible meet the impossible to become the possimpible !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kikilik Messages postés 26 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 27 janvier 2010 6
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);
}
0
Rejoignez-nous