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 :

Problème de thread


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut Problème de thread
    Bonjour,

    j'ai developpé un petite application mono thread que je voudrais passer en multi-thread (pour que ma GUI ne soit plus freezé lors de traitements longs)

    Pour simplifier la situation :
    j'ai deux classes :
    1. une GUI (swing)
    2. une classe effectuant des opérations lors d'événements de la GUI avec deux méthode


    Je sais comment créer une boucle "public void run" mais je ne vois pas comment appliquer ça à mes deux méthodes. Faut-il que je déporte chaque méthode dans une classe séparré ?

    @+
    trax

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    A priori, oui, il faut au moins une classe qui implémente un Runnable.

    Il faudra sans doute prévoir également les cas d'annulation, un indicateur de progression, etc ...

  3. #3
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut
    yop une classe qui implements Runnable ou qui extends Thread c'est sur. Mais est ce qu'il en faut une par méthode ? Tant qu'il y avait qu'une méthode je voyais comment faire mais la non. C'est peut être un truc tout bête :s

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    Ben soit tu fais une seule classe qui prend le type de l'action, et tu traites les deux cas dans la methode run, soit tu fais deux classes, une par methode. La deuxième méthode est plus souple que la première, surtout si le nombre de méthodes augmente.
    Je vois pas trop comment faire autrement.

  5. #5
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut
    Et avec la première méthode que tu décris (une seule classe) il faudrait donc ajouter des "pipes" pour communiquer la nature de l'action. C'est bien ça ?

  6. #6
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Tu as Concurrency in Swing, qui est pas mal. Divers tutoriaux sur developpez.com : Des interfaces graphiques plus performantes avec SwingWorker, ou Threads et performance avec Swing.

    Tout dépend comment est fait ton logiciel, mais s'il s'agit seulement de traiter le cas des traitements longs, en général les simples mécaniques de threads suffisent, du moment qu'on a compris que, coté GUI swing, il faut tout faire dans le cadre de l'event dispatching thread.

    Au lancement du traitement long, en imaginant que il soit déclanché par l'appui d'un bouton, tu as donc une chose actuellement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /* BEUARK */
    public void actionPerformed(ActionEvent evt)
    {
     lancementTraitementLong();
    }
    Ceci bloque l'ensemble de ta GUI durant tout le temps de traitement. Tu dois le remplacer par quelque chose comme ça (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /* VERY GOOD ! */
    public void actionPerformed(ActionEvent evt)
    {
     Thread course;
     
     course = new Thread(new java.lang.Runnable(){
      public void run()
      {
        lancementTraitementLong();
      }});
      course.start();
    }
    I y a des subtiités diverses et variées, mais une fois que tu auras compris ça, ce sera plus facile pour le reste.

    Durant le traitement long, il est probable que tu auras à modifier l'aspect de ta GUI.

    Jusqu'à présent tu le faisais comme ceci (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /* BEUARK */
     label.setText("FINI ! ");
    Dorénavant tu DEVRAS le faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* VERY GOOD ! */
    EventQueue.invokeLater(new java.lang.Runnable(){
     public void run()
     {
      label.setText("FINI ! ");
     }
    });
    Voilà pour l'essentiel.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

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

Discussions similaires

  1. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 15h35
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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