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 :

[Thread] Exemple de compréhension


Sujet :

avec Java

  1. #1
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut [Thread] Exemple de compréhension
    Bonjour,

    j'ai fait un petite exemple de Thread mais je n’arrive pas à faire qulque chose pour voir bien comment sa marche.

    je lance un "Thread.sleep(5000);" avec 2 bouton différant
    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        @Override
        protected Object doInBackground() throws Exception
        {
            System.out.println("Début traitement.");
     
            Thread.sleep(5000);
     
            System.out.println("FIN traitement.");
            return null;
        }
    dans les "jButton1ActionPerformed" et "jButton2ActionPerformed" je fait appel à qui lance la méthode doInBackground()

    donc pour avoir un cas pratique sur les Thread je devrais avoir deux fois de suite :
    Début traitement. (du 1er bouton)
    Début traitement. (du 2em bouton)

    si je click sur l'un à la suite de l'autre !?
    Mais sa n’arrive jamais dit moi si ces normale ou pas ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    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 073
    Points : 7 977
    Points
    7 977
    Par défaut
    La tu ne montres pas les bouts de code concernant les eventuels Thread me semble-t-il. Poste un peu le code qui appele ce que tu as posté.
    (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 confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par wax78 Voir le message
    La tu ne montres pas les bouts de code concernant les eventuels Thread me semble-t-il. Poste un peu le code qui appele ce que tu as posté.
    les évènement sur les 2 bouton dans l'IHM:
    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
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                         
        {                                             
            // TODO add your handling code here:
     
                GestionaireDeTache g = new GestionaireDeTache();
                g.execute(); //lance un thréde
     
            //g.doInBackground();
        }                                        
     
        private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)                                         
        {                                             
            // TODO add your handling code here:
            GestionaireDeTache g = new GestionaireDeTache();
            g.execute(); //lance un thrédee
            //evt.
        }
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package dz.elit.formation;
     
    import javax.swing.SwingWorker;
     
    /**
     *
     * @author PC
     */
    public class GestionaireDeTache extends SwingWorker<Object, Object>
    {
     
        @Override
        protected Object doInBackground() throws Exception
        {
            System.out.println("Début traitement.");
     
            Thread.sleep(5000);
     
            System.out.println("FIN traitement.");
            return null;
        }
     
    }

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    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 073
    Points : 7 977
    Points
    7 977
    Par défaut
    Bah euh, qu'est-ce qui ne vas pas en fait ?

    Parce que la avec ton code, qui fonctionne, je ne vois rien qui pose problèmes ?!

    Je clique sur les 2 boutons d'affilé, et j'obtient bien un :

    "Début traitement."
    5 secondes ...
    "FIN traitement."

    pour chacun independement.
    (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

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Il faudrait voir le code ou les actionListener sont associés aux boutons, c'est sûrement là que se situe le problème.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Je clique sur les 2 boutons d'affilé, et j'obtient bien un :

    "Début traitement."
    5 secondes ...
    "FIN traitement."

    pour chacun independement.
    justement je veux que si je cliquer sur les 2 bouton l'in après l'autre (avant la fin des 5 secondes) il devrais m'afficher:

    Début traitement. (du 1er bouton)
    Début traitement. (du 2em bouton)
    ....
    Fin des 2

    pour voir le principe des Thread (2 traitement en parallèle) Mais sa marche pas ?

    merci d'avance

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Mis à part qu'il va pas écrire "fin des 2" mais "fin de traitement" deux fois, si ça marche, on comprend pas c'est quoi ton soucis, quand tu clique rapidement sur les deux boutons, t'as quoi dans la console?

  8. #8
    Membre confirmé
    Avatar de geforce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 055
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Mis à part qu'il va pas écrire "fin des 2" mais "fin de traitement" deux fois, si ça marche, on comprend pas c'est quoi ton soucis, quand tu clique rapidement sur les deux boutons, t'as quoi dans la console?
    Début traitement. (du 1er bouton)
    Fin traitement. (du 1er bouton)

    Début traitement. (du 2em bouton)
    Fin traitement. (du 2em bouton)

    Malgré que j'ai clique (sur bouton 2) avant la fin des 5s

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    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 073
    Points : 7 977
    Points
    7 977
    Par défaut
    Montres alors un peu le code qui appele ces 2 methodes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt);                                      
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt);
    Le premiere bouton quand tu cliques dessus il reste "Gris" (comme enfoncé) jusqu'a la fin des 5 secondes ? Puis l'autre se clique quand le premiere se degrise ? (Ca serait bizarre mais bon...)
    (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
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    oups mal lu le code

    c'est pas run(), c'est execute() qu'il faut utiliser! run fera les calculs (dont le sleep) du swingworker dans le thread courant, il ne démarrera pas d'autre 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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.SwingWorker;
     
    public class Main {
     
    	public static class GestionaireDeTache extends SwingWorker<Object, Object> {
     
    		@Override
    		protected Object doInBackground() throws Exception {
    			System.out.println("Début traitement.");
     
    			Thread.sleep(5000);
     
    			System.out.println("FIN traitement.");
    			return null;
    		}
     
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		JButton btn1 = new JButton("un");
    		JButton btn2 = new JButton("deux");
    		btn1.addActionListener(new ActionListener() {
     
    			public void actionPerformed(ActionEvent e) {
    				new GestionaireDeTache().execute();
    			}
    		});
    		btn2.addActionListener(new ActionListener() {
     
    			public void actionPerformed(ActionEvent e) {
    				new GestionaireDeTache().execute();
    			}
    		});
    		frame.getContentPane().setLayout(new FlowLayout());
    		frame.getContentPane().add(btn1);
    		frame.getContentPane().add(btn2);
    		frame.pack();
    		frame.setVisible(true);
    	}
     
    }

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

Discussions similaires

  1. les threads exemple balls
    Par nasro21 dans le forum Débuter
    Réponses: 3
    Dernier message: 27/02/2015, 22h34
  2. [Thread] probleme de compréhension
    Par tinico dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 10/04/2007, 14h57
  3. L'exemple des thread de la FAQ ne marche pa chez moi
    Par mcdonald dans le forum Général Python
    Réponses: 2
    Dernier message: 10/06/2006, 14h47
  4. Thread boost, un exemple ?
    Par EpOnYmE187 dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 22/05/2006, 22h03
  5. [Thread] aide pour comprendre un exemple
    Par maminova77 dans le forum 2D
    Réponses: 2
    Dernier message: 19/04/2006, 23h24

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