[Java]JProgressbar ne s'affichant pas

Fermé
esox_ch Messages postés 769 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 14 mars 2007 - 14 mars 2007 à 22:23
 toto - 13 juil. 2007 à 10:36
Bonjour,

Je developpe en ce moment une petite applet permettant d'envoyer HTTP des fichiers et je desire pouvoir afficher en temps réel le pourcentage d'avancement du transfer. Le transfère marche mais la barre de progression ne s'affiche que quand le transfère est terminé, et le fait avec la valeur de 100%.

Voilà le code :

Définition :
       
       progressBar.setVisible(true);
        progressBar.setValue(0);
        progressBar.setIndeterminate(false);
        progressBar.setMinimum(0);
        progressBar.setMaximum(100);

        progressBar.paint(progressBar.getGraphics());


La methode qui est appelée pour l'envoie du fichier :

 private void pipe(InputStream in, OutputStream out) throws IOException {
        byte[] buf = new byte[10000];
        int nread;

        synchronized (in) {
            double done;
            double delta;

            while ((nread = in.read(buf, 0, buf.length)) >= 0) {
                out.write(buf, 0, nread);
                transfered += nread;

                delta = (double) (getFileLength() - getTransfered()) / getFileLength();
                done = (100 * (1 - delta));
                if(done%5 != 0) continue;
                progressBar.setValue((int) done);
                progressBar.getTopLevelAncestor().paint(progressBar.getGraphics());
            }
        }
        out.flush();
    }



Est-ce que qqn voit la raison?

Merci

2 réponses

HackTrack Messages postés 618 Date d'inscription vendredi 26 juillet 2002 Statut Membre Dernière intervention 13 juillet 2013 972
16 mars 2007 à 09:20
Salut!

C'est parceque ta JProgressBar n'a pas le temps de se raffraîchir entre deux modifications.

Tu dois utiliser la classe javax.swing.SwingWorker qui n'est pas livrée avec le JDK5 (mais une version repensée de celle-ci est livrée avec le JDK 6) mais que tu peux aller télécharger sur le site de Sun.

API de la classe (JDK6): https://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

Tutoriel et exemple (JDK6): https://rom.developpez.com/java-swingworker/

Téléchargement du code source de SwingWorker: https://www.oracle.com/java/technologies/

;-)
HackTrack
4
on écrit 'transfert !!!
fais un effort dans ton orthographe , relie toi!:

" d'avancement du transfer. Le transfère marche mais "
-1