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

avec Java Discussion :

Débuter avec la progressBar


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut ProgressBar et thread
    Salut tous,

    je désire ajouter une progressBar dans mon code java pour suivre l'avancement d'envoi des emails.
    J'ai trouvé un bon code qui affiche la progressBar exactement comme je cherche
    Il me faut maintenant lancer un thread dans ma classe d'envoi.
    Je ne comprend pas clairement comment manipuler les threads
    Y a-t-il quelqu'un qui peut m'aider?

    Merci pour toute indication..

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Quelle librairie utilises-tu?

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut
    salut,

    J'utilise JDK 1.6

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour effectuer ce genre d'opération, l'idéal est le SwingWorker, qui encapsule les Thread nécessaires (mise à jour de l'interface, thread de calcul, résultat, etc)


    http://rom.developpez.com/java-swingworker/#LIII

    Ca évite de tout faire à la main

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut
    Salut,

    @Tchize: Merci bcp pour le lien.

    Mais, malheureusement, j'ai pas réussi à appeler ma progressBar souhaitée.

    Je vous propose un code qui me semble plus facile:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
    public class progression
    {
    JProgressBar progress;
    Thread monThread;
    int rappidite;
    JFrame cadre;
    public static void main(String[] args)
    {
    progression prgs= new progression();
    prgs.go(50);
    }
    public void go(int rappid)
    {
    rappidite=rappid;
    // Création de l'interface
    cadre = new JFrame("En cours de chargement");
    JPanel panneau = new JPanel();
    JLabel texte = new JLabel("Veuillez patienter pendant le chargement...");
    progress = new JProgressBar(0, 100);
    panneau.add("Center", progress);
    panneau.add("Center", texte);
    cadre.getContentPane().add(BorderLayout.CENTER, panneau);
    cadre.setSize(275,85);
    cadre.setVisible(true);
    cadre.setResizable(false);
    cadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // Création de thread
    monThread= new Thread(new MonRunnable());
    monThread.start();
    }
    public class MonRunnable implements Runnable
    {
    public void run()
    {
    for (int j = 1; j < 100; j++) // on fait une boucle pour que la JProgressBar "avance"
    {
    progress.setValue(j);
    try
    {
    monThread.sleep(rappidite);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    }
    cadre.dispose(); //on ferme le cadre (le chergement est fini!)
    }
    }
    }
    son exécution montre la progression désirée.
    Mon problème reste au moment de l'appel pour afficher l'avancement de l'envoi.

    Merci d'avance

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    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 096
    Par défaut
    Citation Envoyé par a-sana Voir le message
    Mon problème reste au moment de l'appel pour afficher l'avancement de l'envoi.
    C'est a dire ? Le moment ou tu executes :

    ?

    Ou bien au moment du setProgress (qui devrait pas etre mis avec un invokeLater par ailleurs ?) ?
    (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

  7. #7
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut Débuter avec la progressBar
    Salut,

    C'est la première fois que j'essaie une progressBar.
    Je désire intégrer une qui affiche l'avancement de l'envoi d'un e-mail vers toute une liste de diffusion.
    Le code ci-dessus vous présente la progression que j'utilise.
    Mon problème c'est au moment d'envoi. Je veux que la progression et l'envoi se déroulent en parallèle.

  8. #8
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Par défaut
    Tchize t'avais redirigé vers SwingWorker je comprends pas le problème que tu as avec ça.

    Il y a un bout de code complet, tu le reprends et tu l'adapte à ton projet.

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    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 096
    Par défaut
    Citation Envoyé par a-sana Voir le message
    Je veux que la progression et l'envoi se déroulent en parallèle.
    Voila le problème a mon avis.
    A ce que j'ai compris en te lisant j'ai compris que tu allais faire un thread avec un boucle for et des sleep pour faire avance la progress bar et un thread pour envoyer tes messages ?

    Ta progression se fait apres chaque envoie de X bytes ou X messages, envois qui sont mis dans un seul thread qui appelle le setValue() entouré d'un invokeLater par exemple. (Ou en implementant swingworker).

    Et encore une fois, la solution est marqué dans le lien de Tchize.
    (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

  10. #10
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut
    Bonjour,

    Merci tous pour me suivre jusqu'au bout. Malheureusement j'ai pas encore arrivé à résoudre mon problème.

    Tout le monde a affirmé que le SwingWorker est la meilleure solution. Enfin j'ai arrivé à l'adapter à mon projet.

    En réalité mon envoi ne se fait pas dans une boocle for. En fait c'est une méthode prédéfinie: Voici mon essai d'appel du SwingWorker:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
          try
            {
                   mail.send();
                   SwingWorkerDemo demo = new SwingWorkerDemo();
                   MonSwingWorker worker= demo.new MonSwingWorker();
                   worker.execute();
                   JOptionPane.showMessageDialog(this, "Votre message a été envoyé avec succès");
            }
            catch (Exception e)
            {
                e.printStackTrace(); System.out.println(e.getMessage());
            }
    En testant ceci, la progression et l'envoi ne se font pas tout à fait en parallèle.

    Comment faire svp?

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    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 096
    Par défaut
    Tu espere voir la progression de quoi en definitive car la ca ne va pas etre possible je penses ?

    Ca ne sert a rien du tout dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    progressBar.setValue(0); // Indique Rien de fait
    sendMail(); // bloquant jusqu'a ce qu'il ait envoye le mail si je ne m'abuse
    progressBar.setValue(100); // Indique que l'envoi est fini
    -> a part passé de 0 a 100 % en un coup il n'y aura donc aucun interet de faire ca.

    Hormis le fait d'avoir une boucle sur plusieur envois il n'y a aucun interet.

    Voici cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    progress.setMaximum(nbr_envoie);
    progress.setValue(0);
    for (i=0;i<nbr_envoie;i++)
    {
        sendmail();
        progress.setValue(i);
    }
    Voila tout ce que je peux encore faire pour t'aider apres je doute que cela soit encore possible. (Et le je ne parlais meme pas de swingworker... car ton probleme se situe ailleurs a mon avis)
    (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

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    ce qu'il faut c'est regarder dans ta fonction send mail, s'il y a pas des flux où tu peux récupérer l'avancement de l'envoi. Sinon ça ne sert à rien !

  13. #13
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut
    Salut,

    @wax78: Merci Mr. pour votre souffle. J'ai perdu beaucoup de temps dans cette progressBar et j'ai vous dérangé trop mais enfin ça réussit

    J'ai évité d'utiliser le SwingWorker. C'était plus difficile pour moi
    J'ai suivi les étapes de mon envoi et j'ai ajouté des setValue comme vous l'avez signé avec un thread qui regroupe l'envoi d'une part et la progression d'une autre et c'est bon.

    Merci tous..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. débuter avec Visual .NET
    Par akimmm dans le forum MFC
    Réponses: 4
    Dernier message: 28/10/2005, 04h53
  2. [GridBagLayout] Comment débuter avec ce layout
    Par Bighobbit dans le forum Débuter
    Réponses: 12
    Dernier message: 28/09/2005, 17h13
  3. [MFC je crois] Débuter avec visual c++
    Par flzox dans le forum MFC
    Réponses: 6
    Dernier message: 28/06/2005, 18h31
  4. [JAXP] Débuter avec XML et Java
    Par Fleep dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/05/2005, 11h27
  5. Débuter avec Java
    Par reptils dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 11/07/2004, 21h26

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