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

SWT/JFace Java Discussion :

Thread / IHM figé!


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut Thread / IHM figé!
    Bonjour,
    J'ai besoin d'interagir avec mon IHM (swt) sans qu'elle se fige
    En faite voici mon code que j'ai fait avec l'aide d'autre post, il s'execute mais l'interface reste figé pendant l'execution du Thread
    Est ce une bonne facon de faire? Comment faire pour que l'interface ne se fige pas!
    merci

    code de ma methode:
    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
    public void actionPerformed() {
    		   new Thread(new Runnable() {
    			      public void run() {
     
    			    	  Display d = Display.getCurrent();
    			    	  // TODO Auto-generated method stub
    			    	  d.syncExec(new Runnable(){
    			    		  public void run() {
    			    			  runn();
    			    			  //styledText1.setText("debut du test:");
    			    		  }
    			    	  });
     
    			      }
    		   }).start();
    	}

  2. #2
    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
    Tu ne dois inclure dans le bloc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    d.syncExec(new Runnable(){
           public void run() {
                   runn();
                   //styledText1.setText("debut du test:");
           }
    });
    que des appels qui vont directement impacter l'interface graphique (donc des setText &cie)

    Tous tes autres traitements doivent être réalisés dans la méthode run de ton thread

    Donc je me prononcerais plutôt pour quelquechose dans ce style

    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
    
    new Thread(new Runnable() {
                      public void run() {
                          runn();
                          Display d = Display.getCurrent();
                          // TODO Auto-generated method stub
                          d.syncExec(new Runnable(){
                              public void run() {                              
                                  styledText1.setText("debut du test:");
                              }
                          });
                          
                      }
               }).start();

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    ce qu'il y a c'est que mon "runn()" a également de nombreux appel à l'interface et à des variable
    On dirai que les variable ne passe pas, ex imaginons en simplifiant que mon runn() soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (int i=0 ; i< 3;){
        list1.select(i);
        String paratest = list1.getItem(i);
     
    }
    cmd = paratest + ....
    comment utilisé le "asyncExec" dans ce cas?

  4. #4
    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 ce qui concerne les getters ils ne posent pas problème au niveau de la synchro ce sont uniquement les opérations qui vont directement modifier l'interface (son contenu et/ou son aspect) qui doivent être exécutés dans le Display#syncExec

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    ok merci pour ce renseignement mais alors comment fait pour le select(i)
    si je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i=0 ; i< 3;){
    
    d.syncExec(new Runnable(){ public void run() { list1.select(i); } });
    String paratest = list1.getItem(i); }
    j ai une erreur sur le i qui n'est pas reconnu comme declaré

  6. #6
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Par défaut
    de meme si je veux affiché une variable celle ci n'est pas recounu comme declaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    text = list1.getItem(i);
    d.syncExec(new Runnable(){
           public void run() {
                   styledText1.setText(text);
           }
    });

Discussions similaires

  1. Probleme de thread /IHM
    Par deusyss dans le forum Général Python
    Réponses: 4
    Dernier message: 30/12/2013, 19h13
  2. Thread/Mise a jour d'IHM
    Par davids75014 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 04/06/2007, 14h44
  3. [java][IHM] bloquage de fenetre + thread(?)
    Par vince3320 dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 13/02/2007, 15h32
  4. [VB.NET][VS2003] Threads et IHM
    Par toniolol dans le forum Windows Forms
    Réponses: 7
    Dernier message: 27/04/2006, 13h54
  5. [SWT]mise a jour ihm SWT par un thread
    Par will82 dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 06/08/2004, 11h37

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