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 :

[SWT] Text & Thread


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut [SWT] Text & Thread
    Bonjour,

    Le problème que je rencontre relève peut être plus d'un problème d'architecture que de SWT, mais n'ayant pas trouvé de solution, je me tente ici.

    J'ai une interface composée d'un bouton de type TOGGLE, et d'un widget Text. Le bouton permet d'activer/désactiver un traitement. Ce traitement (dérivant de Thread) lit un fichier et affiche sur "System.out" divers erreurs/validations. Je souhaiterai que ces informations soient affichées dans le widget Text plutot qu'en "System.out". Pour cela, j'ai rajouté un attribut Text dans ma classe de traitement que j'initialise à partir du constructeur. Mais l'appel de la fonction setText(...) provoque une Exception "Invalid thread access". Je pense qu'il y a un problème de thread "concurrent" puisque dans le code, j'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (display.thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
    J'aimerais savoir si d'une part ma solution d'ajout d'attribut Text est une solution correcte, et comment éviter cette exception ? (synchronized méthode ?)

    Merci d'avance

    ++

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Par défaut
    Pour accèder à un "widget" SWT à partir d'un thread java, il faut utiliser
    la méthode asyncexec de l'objet Display, 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
    14
    15
    16
    17
    18
     
       final Text monChamp = new Text(shell, SWT.BORDER);
       new Thread(new Runnable() {
          public void run() {
             int cpt=0;
             while (true) {
                //  'Tite pause
                try { Thread.sleep(1000); } catch (Exception e) { }
                cpt++;
                // Tout est là !
                Display.getDefault().asyncExec(new Runnable() {
                   public void run() {
                          monChamp.setText("Le compteur vaut :" + cpt);
                   }
                }
             }
          }
       }).start();
    Laurent

  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
    bonjour j 'essaye de faire quelque chose de simimilaire mais avec la meme structure j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "Thread-0" java.lang.NullPointerException
    	at visual$19.run(visual.java:625)
    	at java.lang.Thread.run(Thread.java:595)
    si j'enleve sur le thread mon code marche mais l ihm se fige (d'ou la necessité du thread)
    Une idée pour mon erreur?

    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
    public void actionPerformed() {
    		   new Thread(new Runnable() {
    			      public void run() {
    				Display d = Display.getCurrent();
    				// TODO Auto-generated method stub
    ligne 625->	 	            d.asyncExec(new Runnable(){                     
    					public void run() {
    						//runn();
    						styledText1.setText("debut du test:");
    					}
    				});
    			      }
    		   }).start();
    	}
    edit: en remplacant Display.getCurrent(); par Display.getDefault(); il n'y a plus d'erreur mais l'IHM est figé pendant l'execution du thread

Discussions similaires

  1. Affichage texte dans un text buffer (Thread)
    Par mrttlemonde dans le forum GUI
    Réponses: 1
    Dernier message: 26/01/2010, 21h12
  2. [SWT] Redraw de composant SWT depuis un thread non SWT
    Par Slayne dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 07/02/2008, 09h44
  3. [SWT/TEXT] Forcer mon text à être un long
    Par sanchou dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 14/05/2007, 09h43
  4. SWT texte animé
    Par sroux dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 04/01/2007, 13h50
  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