IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

JProgressBar et téléchargement


Sujet :

Java

  1. #1
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut JProgressBar et téléchargement
    Bonjour,

    je souhaite suivre la progression du téléchargement d'un fichier à l'aide d'une JProgressBar et je ne sais pas vraiment comment m'y prendre.
    Faut-il lire la taille du fichier en train d'être télécharger ?
    Faut-il connaitre le type de connection de l'utilisateur et la taille du fichier et en déduire une progression en fonction du temps ?
    J'imagine que cela à été déjà construit depuis longtemps, existe t-il des exemples ?

    En vous remerciant de vos idées.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Une bar de progression admet un minium et un maximum (en general 0 a 100).

    Tu px donc lui demander de se position de 0 a 100.

    Il te suffit te prendre la taille du fichier, la taille deja envoyée et de faire un peu d'arithmétique pour passer au 0 a 100. Ou tout simplement de changerl e min et le max par 0 et la taille du fichier.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    je suis parti de l'exemple ProgressMonitorDemo.java du site de Sun.

    Avec ce que j'ai fait, j'obtient un fichier qui se télécharge, puis une barre de progression qui se remplie d'un seul coup à la fin du téléchargement.

    Voici le code que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     public Void doInBackground() {      
                // Le fichier que je télécharge.  
                File file = new File(System.getProperty("user.home")
                        + System.getProperty("file.separator")
                        + "google.pdf");
                // La taille du fichier 
                long fileLength = Long.parseLong(size);                
     
                // Le téléchargement du fichier.
                updateFtp = new UpdateFtp();
                updateFtp.update();
     
                int progress = 0;          
                setProgress(0);
                while (progress < 100) {               
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException ignore) {}
                    // Make random progress.
                    progress = (int) ((file.length() * 100) / fileLength);                
                    setProgress(Math.min(progress, 100));
                }
                return null;
            }
    En clair, je n'arrive pas à trouver ce qui me manque ou ce que j'ai loupé !

  4. #4
    Membre confirmé
    Homme Profil pro
    Développement logiciel
    Inscrit en
    Mai 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développement logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2005
    Messages : 74
    Par défaut
    C'est un problème d'affichage classique qui se résout par l'utilisation de threads. La preuve (et l'explication!) ici:
    Pourquoi ma barre de progression se remplit d'un coup ?

  5. #5
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    après la lecture de la page http://rom.developpez.com/java-swingworker/,
    j'ai modifié un peu mon code, mais il y a toujours le même défaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class Task extends SwingWorker<Integer, String> {
     
            protected Integer doInBackground() {
                //  L'emplacement du fichier à télécharger et sa taille.
                File file = new File(System.getProperty("user.home")
                        + System.getProperty("file.separator")
                        + "google.pdf");            
                long fileLength = 317824;          
                int progress = 0;            
                setProgress(0);            
                updateFtp = new UpdateFtp();
     
                while (progress < 100) {
                 // Téléchargement du fichier.
                 updateFtp.update();
                 // Progression du téléchargement. 
                 progress=(int)((file.length()*100)/fileLength);                              
                 setProgress(Math.min(progress, 100));
                }
                return progress;
            }
     
            public void done() { ... }
        }
    Je ne trouve pas le moyen d'arranger cela !
    Merci de votre aide.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en même temps, es tu vraiment sur que ta classe FTP ne réserve pas directement un espace fichier de la taille du fichier final?

    Affiche ce que donne ton file.length() au fur et à mesure.

  7. #7
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    es tu vraiment sur que ta classe FTP ne réserve pas directement un espace fichier de la taille du fichier final?
    Je ne connaissais pas ce point technique. Après je ne sais pas comment le vérifier. Ma classe Ftp crée un objet Socket puis utilise la méthode connect() pour établir la connexion Ftp.

    Affiche ce que donne ton file.length() au fur et à mesure.
    J'ai fait la modification suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (progress < 100) {
                 // Téléchargement du fichier.
                 updateFtp.update();
                 System.out.println("length : " + file.length());
                 // Progression du téléchargement. 
                 progress=(int)((file.length()*100)/fileLength);                              
                 setProgress(Math.min(progress, 100));
                }
    La classe commence par télécharger le fichier. Une fois le téléchargement terminé, elle affiche la taille du fichier.

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Et?

    Qu'est-ce qui s'affiche sur la console pendant le téléchargement?

  9. #9
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    es tu vraiment sur que ta classe FTP ne réserve pas directement un espace fichier de la taille du fichier final?
    Je ne connaissais pas ce point technique. Après je ne sais pas comment le vérifier. Ma classe Ftp crée un objet Socket puis utilise la méthode connect() pour établir la connexion Ftp.

    Affiche ce que donne ton file.length() au fur et à mesure.
    J'ai fait la modification suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (progress < 100) {
                 // Téléchargement du fichier.
                 updateFtp.update();
                 System.out.println("length : " + file.length());
                 // Progression du téléchargement. 
                 progress=(int)((file.length()*100)/fileLength);                              
                 setProgress(Math.min(progress, 100));
                }
    La classe commence par télécharger le fichier. Une fois le téléchargement terminé, elle affiche la taille du fichier. Enfin, la bar de progression se rempli à 100%.

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ah bah ouais forcément.

    Ton appel à

    Télécharge tout le fichier en une seule fois.
    DOnc forcément le file.length() fait la taille finale et le téléchargement est fini après cet appel. Donc focément ta barre passe directement à 100%.

    Si tu veux que ta JProgressBar se remplisse graduellement il faut que tu fasse un appel à setProgress au fur et à mesure du téléchargement qui se réoule dans la méthode update de ta classe UpdateFtp. (grosso modo à chaque lecture de n bytes).

Discussions similaires

  1. Update JProgressBar pendant un téléchargement
    Par Bladelight dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 12/01/2012, 03h57
  2. Proposer un téléchargement
    Par chunly dans le forum Flash
    Réponses: 4
    Dernier message: 03/05/2006, 09h43
  3. Proposer un document en téléchargement
    Par Ph. B. dans le forum XMLRAD
    Réponses: 11
    Dernier message: 10/02/2003, 10h27
  4. Bloquer le téléchargement de certains types de fichiers
    Par Nikos dans le forum Développement
    Réponses: 4
    Dernier message: 23/12/2002, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo