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 :

Problème timer thread et swt


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Par défaut Problème timer thread et swt
    Bonjour à tous j'ai fait une application en SWT qui affiche des photos et des vidéos en boucle(avec JMF), il y a aussi un timer qui fait clignoter un label en même temps donc pas mal de chose.

    Mon problème c'est que j'ai du mal à géré toute ces choses et donc ça créer des bugs. Quand mes images changent ( avec une petite transition en augmentant progressivement l'alpha du canvas ), le timer clignotant est bloqué ou/et ma vidéo se boque si elle doit chargé un autre vidéo ( sinon ça tourne avec un peu de freeze ).

    Le problème c'est que plusieurs timer ou thread doivent accéder au même moment au "thread gérant SWT" ( Enfin je crois que ça viens de là ) afin d'effectuer des taches sur les composant notament des redimentions setBounds() ou setVisible pour clignoter.

    Pour accerder à ces méthode j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (displayUse.isDisposed())
    	return;
     
    	displayUse.syncExec(new Runnable()  //  ou asyncExec j'ai cherché aussi de se coté mais sans succes
    	{
    		public void run() 
    		{	
    //par exemple clignoter						
    		     if (GestionMultimedia.this.labelPrix.getVisible())							    GestionMultimedia.this.label.setVisible(false);
    		     else							     
                                GestionMultimedia.this.label.setVisible(true);
    		}
            });


    Est-ce qu'il serait possible de gérer l'ordre d'execution ? Par exemple timer clignotant > Video > thread image , mon timer clignoterais en permanance , ma video se chargerait entre les images.

    En cherchant la solution il faudrait utiliser les méthode notify wait, est-ce la bonne solution ? Et si oui comment l'intégré car j'ai du mal à voir comment !

    Merci de me laisser tout conseils ou solutions !

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Je ne sais pas bien comment tu gère tes timer (je suis pas trop callé en SWING si il viennent de là) mais pour faire ça en SWT on ferait plutôt comme ça :

    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
     
    displayUse.asyncExec(new Runnable() {
     
    	public void run()  {
    		Display display = GestionMultimedia.this.labelPrix.getDisplay();
    		if (GestionMultimedia.this.labelPrix.isDisposed()) {
    			return;
    		}
    		if (GestionMultimedia.this.labelPrix.getVisible()) {
    			GestionMultimedia.this.label.setVisible(false);
    		}
    		else {
    			GestionMultimedia.this.label.setVisible(true);
    		}
    		display.timerExec(200, this); //relance la méthode run() de l'objet dans 200 ms.
    	}
    });
    Comme ça tout est géré par le Display et il n'y a pas de problème.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Par défaut
    Cette manière de procéder à l'air de rendre mon application plus stable ! Merci beaucoup

    Par contre comment je fait pour arrêter ces "speudo" timer ?

  4. #4
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 340
    Par défaut
    Et bien là il s'arrête lorsque le widget est détruit, il suffit de mettre un test qui envoie sur un return si il est vérifié, ainsi on atteind plus la ligne display.timerExec(..., ...).

    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
     
    displayUse.asyncExec(new Runnable() {
     
    	public void run()  {
    		Display display = GestionMultimedia.this.labelPrix.getDisplay();
    		if (GestionMultimedia.this.labelPrix.isDisposed()) {
    			return; //là le pseudo-thread s'arrête
    		}
    		if (GestionMultimedia.this.labelPrix.getVisible()) {
    			GestionMultimedia.this.label.setVisible(false);
    		}
    		else {
    			GestionMultimedia.this.label.setVisible(true);
    		}
    		display.timerExec(200, this); //relance la méthode run() de l'objet dans 200 ms.
    	}
    });

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/01/2013, 10h11
  2. Problème avec un Timer/Thread
    Par Mede12 dans le forum Général Java
    Réponses: 4
    Dernier message: 30/07/2009, 09h23
  3. Problème de threads avec RCP (SWT inside)
    Par slashmax dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 11/07/2008, 15h00
  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