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]modifier un composant graphique


Sujet :

SWT/JFace Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 56
    Points
    56
    Par défaut [thread]modifier un composant graphique
    Bonjour,

    Je developpe actuellement une application qui permet a chaque clique d'un bouton d'afficher une ligne avec la classe GC.
    Cependant je souhaite passer par les thread java car ensuite j'aimerai bien faire une animation graphique.

    Voici le code de mon bouton, a chaque pression je lance 5 threads.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    zz.addListener(SWT.MouseUp, new Listener() {
    			public void handleEvent(Event event) {
    				for (int i = 10; i < 15; i++) {
    					Thread t1;
    					ThreadPacket ex1 = new ThreadPacket(i, null, c1);
    			 		t1 =  new Thread(ex1);
    			 		t1.start();
    				}
    			}
    		});
    Ensuite voici le code de ma classe 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
    public class ThreadPacket implements Runnable{
    	int number;
    	RGB colorRGB;
    	Composite parent;
     
    	public ThreadPacket(int i, RGB color, Composite parent) {
    		number = i;
    		colorRGB = color;
    		this.parent = parent;
    	}
     
    	public void run() {
    		parent.getDisplay().asyncExec(new Runnable() {
    			public void run() {
    				NettraceView.drawLines(number, null);
    				try {
    					Thread.sleep(1500);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				NettraceView.eraseLines(number);
    			}
    		});
    	}
    }
    Je voudrais que les 5 threads se lance dans l'ordre et ensuite que chacun leur tour se finisse grace au thread.
    Pour le moment, les thread se lancent un par un. Le suivant attendant que son predecesseur ai fini ses taches.

    Pour etre plus precis, mes fonction drawLines et erasesLines sont static.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void drawLines(int i, Color color) {
       //canevas = variable globale static		
       GC gc = new GC(canevas);
       //tracage de la ligne i
    }

  2. #2
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    Slt,
    juste un ptit truc, c koi la kestion ou le pb ???

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Le probleme est que les threads font comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    debut thread 1
    fin thread 1
    debut thread 2
    fin thread 2
    debut thread 3
    fin thread 3
    alors que je voudrais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    debut thread 1
    debut thread 2
    debut thread 3
    fin thread 1
    fin thread 2
    fin thread 3
    Un autre truc, si j'enleve la partie parent.getDisplay().asyncExec(new Runnable() { de mon programme, il y a une erreur invalid thread access
    Voila j'espere que j'ai été un peu plus clair.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Aucune idee ?

  5. #5
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    ce ke tu peux faire c donne l'adresse du thread suivant au thread precedent afin qu'il le lance quand il commence son programme. ainsi ton premier thread demarre ton deuxieme, ton deuxieme ton troisieme, etc ... et donc finalement ton t1.statrt(), tu le mets a l'exterieur de la boucle de facon a demarrer quand tous tes threads seront initialisés.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 56
    Points
    56
    Par défaut
    Merci pour la solution mais en fait je n'utilise pas les threads dans un boucle.
    La creation des threads se fait dans une fonction qui s'active a chaque arrivee d'un paquet reseau.
    En resume je ne sais pas quand le thread suivant interviendra.

  7. #7
    Membre actif Avatar de fumiste972
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2003
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2003
    Messages : 228
    Points : 291
    Points
    291
    Par défaut
    bon ben la je ne sais pas quoi te dire alors.
    j'espere que tu trouveras une solution !!

Discussions similaires

  1. Composant graphique multiple (ou dérivé d'un TFrame)
    Par Jean Bovet dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/04/2007, 18h57
  2. Comment accèder aux composants graphique à partir d'un autre thread ?
    Par PerpetualSnow dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/03/2007, 11h11
  3. [Composant Graphique] List Box "synchronisés"
    Par Raideman dans le forum C++Builder
    Réponses: 9
    Dernier message: 03/11/2006, 19h50
  4. Palette de composant graphique
    Par kastor111 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/07/2005, 15h04
  5. Composant graphique
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/12/2004, 20h03

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