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

Interfaces Graphiques en Java Discussion :

Thread: passage de valeurs continu


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut Thread: passage de valeurs continu
    Bonjour,

    voila, j'ai une class tread et une class normal
    Class thread:
    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
     
    import javax.swing.JProgressBar;
     
    // La classe qui correspond au thread pour faire avancer la barre
     
    class ThreadAvanceBarre extends Thread
    {
    	JProgressBar barre;
    	int value;
    	public int getValue()
    	{
    		return value;
    	}
     
    	public void setValue(int value)
    	{
    		this.value = value;
    	}
     
    	public ThreadAvanceBarre(JProgressBar b)
    	{
    		barre = b;
    	}
     
    	public void run()
    	{
    		while (barre.getValue() < 100)
    		{
    			try
    			{
    				sleep(100);
    			}
    			catch (Exception e)
    			{
    				System.err.println(e);
    			}
    			barre.setValue(value);
    		}
    	}
    }
    class normale:
    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
     
    import javax.swing.*;
     
    public class Barre extends JFrame
    {
    	JProgressBar b;
    	public Barre()
    	{
    		this.setBounds(200, 200, 200, 50);
    		b = new JProgressBar(0, 100);
    		this.getContentPane().add(b);
    		this.setVisible(true);
    		Thread t = new ThreadAvanceBarre(b);		
    		t.start();	
     
    	}
     
    	public static void main(String args[])
    	{
    		new Barre();
    	}
    }
    JE souhaite mettre à jour ma Jprogrress au fur et a mesure d'un certain traitement que je n'ai pas indiqué et qui est fait dans la class Normale. (exemple: mettre un compteur i=0 à 100 et faire un Add.value(i) sur la jprogressBar qui est dans le thread

    D'avance merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ton traitement ne serait pas mieux dans ta classe de Thread ?
    Comme ça, en fonction de l'avancement, tu mets à jour ta progressBar.

  3. #3
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Au faite, mon traitement est assez long. EN plus, j'ai une dizaine de classes qui demandent ce genre de progressBAr, donc je prefererai garder mon thread dans une class bien separée.

  4. #4
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Connais-tu la classe SwingWorker?

    En faisant une petite recherche tu trouveras des infos qui te permettront de régler ce problème facilement: http://www.google.com/custom?q=swing...developpez.com

  5. #5
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    C'est pour eviter SwingWorker que j'ai choisi les thread car ca m'a l'air BARBAR comme principe... je n'ai trouvé à ce jour aucun tutorial bien fait et expliquant chaque partie du code.

    Sur ce site (developpez.com), il y a bien des explications sommaires, mais pas bien détaillées a mon gout

  6. #6
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    SwingWorker n'a rien de barabare. Elle a été intégrée au JDK c'est dire s'il est recommandé de l'utiliser! C'est exactement ce qu'il te faut! C'est quand meme dommage de passer à coté simplement parce que tu as des préjugés.

  7. #7
    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
    En général, (a part sur DVP bien sur) pour chercher des infos sur java le plus simple est de se rendre dans les tutos de sun:
    http://java.sun.com/docs/books/tutor...cy/worker.html

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276

  9. #9
    Membre chevronné Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class ThreadAvanceBarre extends Thread
    {
    	JProgressBar barre;
    	int value;
    	public int getValue()
    	{
    		return value;
    	}
     
    	public void setValue(int value)
    	{
    		this.value = value;
    	}
     
            public void setBarreValue(int value){
                    this.barre.setValue(value);
            }
     
    	public ThreadAvanceBarre(JProgressBar b)
    	{
    		barre = b;
    	}
     
    	public void run()
    	{
    		while (barre.getValue() < 100)
    		{
    			try
    			{
    				sleep(100);
    			}
    			catch (Exception e)
    			{
    				System.err.println(e);
    			}
    			barre.setValue(value);
    		}
    	}
    }
    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
    import javax.swing.*;
     
    public class Barre extends JFrame
    {
    	JProgressBar b;
    	public Barre()
    	{
    		this.setBounds(200, 200, 200, 50);
    		b = new JProgressBar(0, 100);
    		this.getContentPane().add(b);
    		this.setVisible(true);
    		Thread t = new ThreadAvanceBarre(b);		
    		t.start();	
                    for(int i=0; i<100; i++)
                           t.setBarreValue(i+1);
     
    	}
     
    	public static void main(String args[])
    	{
    		new Barre();
    	}
    }
    ça ne marche pas comme ça ?

    PS : c'est quoi Add.value(i) ?

    PS 2 : il ne plante pas ton thread par hasard (boucle infinie) ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Merci pour ta reponse,

    mais voila, je n'ai pas acces à la methode setBarreValue, j'ai une erreur à ce niveau là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i=0; i<100; i++)
                           t.setBarreValue(i+1);
    Pour le add.value(i), je ne vois pas ca?
    Mon thread ne fonctionnait pas

  11. #11
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Au fait, quelqu'un peut-il me donner just un exemple "bete" de swingWorker qui permet de metrte à jour une jProgressBar via un parametre

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for (int i =0; i<1000: i++)
    {
    if(i<100)
    {
    jProgressBar.setValue(20)
    }
    else
    jProgressBar.setValue(90)
    }

    Je sais que c'est un exemple idiot et qui n'a aucun interet car ce n'est pas un traitement lourd, mais cela me permettrait de mieux comprendre comment cela fonctionne.

    D'avance merci

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Il suffit de prendre la peine d'aller consulter les liens qu'on te donne.

  13. #13
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Mais j'ai été voir les deux !!

    Et j'ai meme analysé le fichier exemple:

    http://java.sun.com/docs/books/tutor...y/Flipper.java

    Mais je ne comprends pas la philosophie de fonctionnement!
    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
     private class FlipTask extends SwingWorker<Void, FlipPair> {
            @Override
            protected Void doInBackground() {
                long heads = 0;
                long total = 0;
                Random random = new Random();
                while (!isCancelled()) {
                    total++;
                    if (random.nextBoolean()) {
                        heads++;
                    }
                    publish(new FlipPair(heads, total));
                }
                return null;
            }
     
            @Override
            protected void process(List<FlipPair> pairs) {
                FlipPair pair = pairs.get(pairs.size() - 1);
                headsText.setText(String.format("%d", pair.heads));
                totalText.setText(String.format("%d", pair.total));
                devText.setText(String.format("%.10g", 
                        ((double) pair.heads)/((double) pair.total) - 0.5));
            }
        }
    Je ne vois pas trop où je peux mettre un parametre la dedans ! (car je souhaite creer 2 classes differentes

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Le lien que je t'ai donné plus haut, met à jour une JProgressBar comme tu cherches à faire.

  15. #15
    Membre chevronné Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par défaut
    Citation Envoyé par Terminator Voir le message
    Merci pour ta reponse,

    mais voila, je n'ai pas acces à la methode setBarreValue, j'ai une erreur à ce niveau là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i=0; i<100; i++)
                           t.setBarreValue(i+1);
    quel genre d'erreur ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2004
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2004
    Messages : 528
    Par défaut
    Citation Envoyé par let_me_in Voir le message
    quel genre d'erreur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    	The method setBarreValue(int) is undefined for the type Thread
    Bref, il ne reconnait pas la methode :'(

    fr1man: désolé de te decevoir, mais j'ai été voir ton lien, trop dur à comprendre pour un debutant. A la limite, je prefere la version de sinok (les tuto de java)...mais ca reste trop abstrait pour moi

  17. #17
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Change cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread t = new ThreadAvanceBarre(b);
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThreadAvanceBarret = new ThreadAvanceBarre(b);
    et t'auras plus cette erreur

Discussions similaires

  1. Passage par valeur / passage par adresse
    Par jeje99 dans le forum C++
    Réponses: 13
    Dernier message: 16/02/2006, 10h29
  2. Réponses: 3
    Dernier message: 09/01/2006, 09h44
  3. Réponses: 7
    Dernier message: 18/05/2005, 15h09
  4. Passage de valeurs entre fenêtres différentes
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/02/2005, 15h10
  5. [C#] Passage de valeur d'une fenêtre à une autre
    Par groum999 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/09/2004, 14h12

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