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

AWT/Swing Java Discussion :

2 threads d'affichage swing


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 30
    Par défaut 2 threads d'affichage swing
    Bonjour a tous,

    voici mon probleme,

    je realise un programe comportant 3 thread.
    Le premier Thread est un simple timer.
    A chaque nouveau cycle de ce timer, les 2 autres thread (notés Ta et Tb) affichent des objets en swing.

    Ta affiche un objet qui peut etre assimilé a une progresse bar, son affichage est peu gourmant, mais il doit absolutment "avancer" de facon reguliere. etre synchrone avec le timer.

    Tb affiche bcp plus de choses a chaque cycle. Le probleme etant que ce thread ralenti l'execution de l'autre thread (Ta).
    L'ideal serait que ce second thread ne se mette pas a jour a chaque cycle, mais seulement de temps en temps pour laisser le premier thread (Ta) progresser normalement.

    Merci pour votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Peux-tu nous montrer du code sur comment tu as implemente tout ca s'il te plait ?

    De plus en comptant l'EDT, l'Event Dispatch Thread, la thread d'affichage AWT/Swing il faut compter 4 Thread et non pas 3. Enfin, je te rappelle que les composants Swing doivent etre manipules durant l'EDT uniquement.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 30
    Par défaut
    Merci pour ton aide !
    En fait j'ai un peu fais évoluer le code (sans meilleur resultat).
    J'utilise la classe Timer de Swing.

    voila ce qu'il en ai aujourd'hui

    la méthode "principale" ou tout se passe :


    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
    26
    27
    28
    29
    30
    31
    32
     
    public vois play(){
     
    //Ce player est un player de clip audio
    player.init(offset);
     
    new Thread(new Runnable() {
    	public void run() {
    		player.play();
    		while ((player.getClip().isRunning()) 
    			;
    		}
    }).start();
     
    new Thread(new Runnable() {
    	public void run() {
    		while (.en on est lecture..) 
                    {
    		//mise a jour de la frame courrante	
                    current_frame++;
    		try {
    			Thread.sleep(66);
    		     } catch (InterruptedException e) {
    			e.printStackTrace();
    		     }
                    }
    }).start();
     
     
     
    AnimationTimer timer = new AnimationTimer(66);
    timer.startAnimation();
    }

    et la classe AnimationTimer :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public class AnimationTimer implements ActionListener {
     
    	Timer timer;
     
     
     
    	AnimationTimer(int delay) {
     
     
    		timer = new Timer(delay, this);
    		timer.setInitialDelay(0);
    		timer.setCoalesce(false);
     
    	}
     
     
    	public void startAnimation() {
     
    			// Start animating!
    			if (!timer.isRunning()) {
    				timer.start();
    			}
     
    	}
     
    	// Can be invoked by any thread (since timer is thread-safe).
    	public void stopAnimation() {
    		// Stop the animating thread.
    		if (timer.isRunning()) {
    			timer.stop();
    		}
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		// Advance the animation frame.
     
     
    // CE REPAINT NE FAIS PAS GRAND CHOSE, J'AIMERAI QU'IL SOIT FLUIDE
    		Panel1.repaint() 
    // CE REPAINT EST TRES GOURMAND EN RESSOURCE, J'AIMERAI QU'IL NE SOIT PAS FLUIDE, QUIT A SAUTER DES CYCLE
    		Panel2.repaint();
    	}
     
    }

    merci d'avoir lu ce bazar

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 30
    Par défaut
    en fait avant j'avais creer dans la methode "play" 2 autres threads, chacune appelant panel1.repaint() ou panel2.repaint() a intervalle regulier... sans meilleurs resultats.

  5. #5
    Membre Expert
    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
    Par défaut
    Suis les conseils de bouye, et cela devrait aller mieux.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 899
    Billets dans le blog
    54
    Par défaut
    Si le rendu est lent alors deja il faut appeler repaint() moins souvent sur ce composant-la. Tu peux en outre le dessiner uniquement quand c'est vraiment necessaire dans une BufferedImage qui sera elle composee a l'ecran a chaque repaint() (comme ca c'est plus rapide). Enfin dois-tu vraiment faire un repaint() complet du composant ? Ca serait pas plutot mieux en calculant la zone necessaire a repeindre et ensuite d'appeler repaint(x, y, w, h) ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Thread et actualisation de l'affichage swing
    Par Pirokkk dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 28/12/2007, 19h41
  2. [1.1] Comment accéder au thread d'affichage ?
    Par fregolo52 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 20/09/2006, 11h27
  3. Obtenir la taille d'un composant d'affichage Swing
    Par jbwan dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 08/06/2006, 09h25
  4. [MFC] thread d'affichage
    Par Joeleclems dans le forum MFC
    Réponses: 31
    Dernier message: 23/05/2005, 14h47
  5. Thread et affichage direct3D plein écran
    Par Harry_polin dans le forum DirectX
    Réponses: 8
    Dernier message: 13/03/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