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

  1. #1
    Membre régulier
    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
    Points : 77
    Points
    77
    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 éclairé 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
    Points : 718
    Points
    718
    Par défaut
    Quelle librairie utilises-tu?

  3. #3
    Membre régulier
    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
    Points : 77
    Points
    77
    Par défaut
    salut,

    J'utilise JDK 1.6

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    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 régulier
    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
    Points : 77
    Points
    77
    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
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    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 ?) ?

  7. #7
    Membre régulier
    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
    Points : 77
    Points
    77
    Par défaut
    Salut,

    @Wax78: merci pour votre attention.
    Malheureusement, je peux pas répondre exactement à votre réponse. Mais je peux expliquer mon problème autrement:
    Lorsque je lance l'envoi, dans mon code, je veux lancer l'avancement avec la progressBar. lorsque le chargement de l'envoi se fait, je veux que la progressBar arrive au pourcentage de 100% et se ferme.
    Maintenant ma question c'est comment j'appelle la progressBar en parallèle avec la fonction d'envoi?

    Merci

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    Par défaut
    Dans ta boucle d'envoie, car je suppose que tu as donc une boucle qui envoye des paquets de bytes, tu vas devoir a chaque "pas" de l'operation faire un jProgressBar.setValue(tavaleur);.

    Mais il faudrait lire le lien que Tchize as soumis pour eviter des problemes si l'operation est faite dans une thread separée.

  9. #9
    Membre régulier
    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
    Points : 77
    Points
    77
    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.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 115
    Points : 86
    Points
    86
    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.

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    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.

  12. #12
    Membre régulier
    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
    Points : 77
    Points
    77
    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?

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    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)

  14. #14
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 62
    Points
    62
    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 !

  15. #15
    Membre régulier
    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
    Points : 77
    Points
    77
    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..

  16. #16
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Bonjour,
    sujet interessant, je m'oriente aussi vers l'intégration d'une progress bar sur mon appli, cepandant, je ne l'ai pas développé avec un affichage de type 'shell' mais avec un JPanel. Or je n'arrive pas à ajouter une ProgressBar sur ma fenêtre ...
    Une solution ?

    Merci

  17. #17
    Membre régulier
    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
    Points : 77
    Points
    77
    Par défaut
    Salut,

    Moi aussi j'ai eu un JPanel. Je travaille avec Netbeans. ça m'a facilité la tache. En fait la progressBar s'ajoute manuellement comme les autres formes et il vous reste l'ajout d'un thread et des setValue dans votre code.
    Je sais pas si c'est votre cas?

  18. #18
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Je travail sous Eclipse,
    lorsque je souhaite ajouter manuellement la progressBar, j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressBar pb1 = new ProgressBar(monPanel, SWT.SMOOTH);
    mais il me souligne en rouge monPanel ( il ne s'appel pas comme ca, c'est pour l'exemple).
    Donc c'est à cet endroit que je ne comprend pas, l'incompatibilité peut etre, mais si vous avez réussi, cela doit être possible

  19. #19
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    Par défaut
    Un composant swing se rajoute a un panel, pas l'inverse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jPanel.add(jProgressBar);
    ou (avec un aute borderlayout)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jPanel.add(jProgressBar, BorderLayout.SOUTH);
    (Mais je vois du SWT alors je ne sais pas dans ton cas).

  20. #20
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Bonjour,
    j'ai essayé de cette manière, mais il me demande de changer le type de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressBar bar1 = new ProgressBar();
    pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Component bar1 = new ProgressBar();
    et bien sur il me demande après de rechanger pour "ProgressBar" ...
    Je ne trouve pas de solution, je n'utilise pas (plus) SWT.
    Je souhaite juste placer cette progressBar en bas de mon appli en Toolbar, a chaque clic sur mon bouton "Connexion".
    Si j'arrive à placer la progressBar j'arriverai à mettre un écouteur sur mon bouton en question.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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