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 :

Les Threads en java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut Les Threads en java
    Salut,
    j'ai creé une fonction java dans laquelle ne redifine la methode run() de mon thread voila le code
    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
        private int get_NbreJourOuvrable(){
               // Date date_Ouv = (Date)Date.fromText(dat_Debut, "dd/mm/yyyy", "");
               // Date date_Fin = (Date)Date.fromText(dat_Fin, "dd/mm/yyyy", "");
             //   int count = 0;
                new Thread(new Runnable(){
                    public void run(){
                        Date date_Ouv = (Date)Date.fromText("01/01/2002", "dd/mm/yyyy", "");
                        Date date_Fin = (Date)Date.fromText("18/02/2009", "dd/mm/yyyy", "");                    
                        if (date_Ouv.compareTo(date_Fin) > 0) {
                            count = -1;            
                        }
                        while (date_Ouv.compareTo(date_Fin) <= 0) {
                            if (!mDBaccess.EstJourFerie(date_Ouv) && !mDBaccess.EstJourWeekEnd(date_Ouv)) {
                                    count++; 
                                    date_Ouv = mDBaccess.AjouterJoursADate(date_Ouv, 1);                        
                            } else  date_Ouv = mDBaccess.JourOuvrableApres(date_Ouv);               
                        }
                    }}
                ).start();
                System.out.println(" count :" + count);
                return count;
        }
    mais le probleme c'est que toujours la valeur de retour vaut 0, count var globale et sachant que sans utilisé les threads la fonction retourne une valeur superieure a zero. il me semble que le thread ne s'execute pas.
    merci pour votre aide.???

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    Si, le thread s'exécute probablement, mais tu n'as pas bien compris l'utilisation des thread.
    Un trhead s'exécute en parallèle d'un autre (ou plusieurs) thread.
    Ta méthode get_NbreJourOuvrable() s'exécute elle-même dans un thread (soit que tu as toi même programmé, soit dans le thread courant car un programme Java s'exécute toujours dans un thread). Après start(), le programme continu. Ainsi tu affiche la valeur de ton count (System.out.println) puis retourne la valeur de ton count, alors que le thread ne s'est probablement (ce n'est pas prévisible, mais dans ce cas ce sera le comportement le plus probable) pas encore exécuté (-> retourne 0).
    Ce n'est pas un problème de ton thread, mais un problème de conception. Tu ne peux pas faire les choses ainsi.

    Mais pourquoi faire un thread dans ce cas ?
    Je t'invite à te documenter plus profondément sur les thread.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    ok, je vais tres bien consulter la doc des threads, mais la solution d'apres vous, par ce que cette fonction prend bcp de temps dans son execution!!
    ok merci.

  4. #4
    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
    Print dans la methode run de ton 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
    private int get_NbreJourOuvrable(){
               // Date date_Ouv = (Date)Date.fromText(dat_Debut, "dd/mm/yyyy", "");
               // Date date_Fin = (Date)Date.fromText(dat_Fin, "dd/mm/yyyy", "");
             //   int count = 0;
                new Thread(new Runnable(){
                    public void run(){
                        Date date_Ouv = (Date)Date.fromText("01/01/2002", "dd/mm/yyyy", "");
                        Date date_Fin = (Date)Date.fromText("18/02/2009", "dd/mm/yyyy", "");                    
                        if (date_Ouv.compareTo(date_Fin) > 0) {
                            count = -1;            
                        }
                        while (date_Ouv.compareTo(date_Fin) <= 0) {
                            if (!mDBaccess.EstJourFerie(date_Ouv) && !mDBaccess.EstJourWeekEnd(date_Ouv)) {
                                    count++; 
                                    date_Ouv = mDBaccess.AjouterJoursADate(date_Ouv, 1);                        
                            } else  date_Ouv = mDBaccess.JourOuvrableApres(date_Ouv);               
                        }
    System.out.println(" count :" + count);
    
                    }
    
    }
                ).start();
                
                return count;
        }

  5. #5
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Changer le print pour le mettre dans le thread permet d'afficher les bonnes valeur en console mais ne règle pas le return.

    La solution est difficile à te donner, parce qu'il faut la concevoir en fonction de ton projet.
    Que fait cette méthode, a quoi sert-elle dans ton programme, quelle est son interaction avec ton interface graphique ?

    Pour exemple : si c'est pour afficher un nombre de jours dans un JLabel, supprime alors le return count;, puis ajoute un monLabel.setText("" + count); (en l'exécutant dans l'EDT, c'est mieux) dans ton thread, à la fin.

    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
        private void miseAJourLabel(){
               // Date date_Ouv = (Date)Date.fromText(dat_Debut, "dd/mm/yyyy", "");
               // Date date_Fin = (Date)Date.fromText(dat_Fin, "dd/mm/yyyy", "");
             //   int count = 0;
                new Thread(new Runnable(){
                    public void run(){
                        Date date_Ouv = (Date)Date.fromText("01/01/2002", "dd/mm/yyyy", "");
                        Date date_Fin = (Date)Date.fromText("18/02/2009", "dd/mm/yyyy", "");                    
                        if (date_Ouv.compareTo(date_Fin) > 0) {
                            count = -1;            
                        }
                        while (date_Ouv.compareTo(date_Fin) <= 0) {
                            if (!mDBaccess.EstJourFerie(date_Ouv) && !mDBaccess.EstJourWeekEnd(date_Ouv)) {
                                    count++; 
                                    date_Ouv = mDBaccess.AjouterJoursADate(date_Ouv, 1);                        
                            } else  date_Ouv = mDBaccess.JourOuvrableApres(date_Ouv);               
                        }
                        monLabel.setText("" + count);
                    }}
                ).start();
        }

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Par défaut
    Salut, la fonction sert a retourner le nombre de jour ouvrable (la profondeur d'un historique) c'est pas juste pour afficher mais c'est plutot pour plusieurs utilisation :
    Merci, l'affichage si juste pour voir, j'ai supprimer le print...
    la valeur de retour est importante, la fonction dure plus de 5 secondes
    l'interface est grisée durant les traitements..
    j'ai deja des problemes comme celui la et c'est resolu avec les threads de cette façon, mais pour ce cas il ne marche plus...

Discussions similaires

  1. les Threads en Java
    Par siempre dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 11/10/2010, 11h01
  2. Les threads en Java / Swing et le "corpus" du programme
    Par jeanjean6 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/04/2010, 10h17
  3. Les Threads en java
    Par khaigo dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 27/10/2009, 14h58
  4. les threads en java
    Par karimala dans le forum Général Java
    Réponses: 2
    Dernier message: 29/12/2008, 14h45
  5. les threads en java
    Par t.n.b.g dans le forum Général Java
    Réponses: 3
    Dernier message: 31/01/2008, 17h48

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