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

 Java Discussion :

Soucis intégration Thread/Swing


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut Soucis intégration Thread/Swing
    Bonjour,

    Je vous contacte car j'ai des soucis avec la mise au point de Thread gérant l'affichage d'éléments graphiques et ces éléments. Je veux créer un compteur qui puisse s'arrêter et se remettre en marche sans bloquer l'interface graphique. Celle-ci consite en trois boutons (start/concel pour les pauses et restart pour reprendre le calcul) Il y a un tutoriel sur ce sujet dans ce site, et je m'y suis inspiré pour écrire le code suivant:

    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
    public void actionPerformed(ActionEvent arg0)
    	{
    		if(arg0.getActionCommand().equals("Start"))
    		{
    			doSomething();
    		}
    		if(arg0.getActionCommand().equals("Pause"))
    		{
    			synchronized(calcul) {
    				try{
    					wait();
    				}catch(InterruptedException ie) {ie.printStackTrace();}
    			}
    		}
    		if(arg0.getActionCommand().equals("ReStart"))
    		{
    			synchronized(calcul) {
    				calcul.notify();
    			}
    		}
    	}
    Avec la méthode doSomething:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void doSomething() {
    		Runnable code=new Runnable() {
    			public void run() {
    				calcul.start();
    			}
    		};
    		if(SwingUtilities.isEventDispatchThread()) {
    			code.run();
    		} else {
    			SwingUtilities.invokeLater(code);
    		}
    	}
    Le Thread en question est créer dans une autre classe Calcul qui étend Thread. Voici la méthode run():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void run()
    	{
    	    int monInt=nombre;
    	    while(true)
    	    {
    	    	monInt++;
    			essai.getLabel().setText("The Number is : "+monInt);
    			essai.setNombre(monInt);
    	    }
    	}
    Pourtant, rien ne se passe lorsque j'appui sur le bouton cancel.
    Quelqu'un pourrait-il m'aider?
    Merci d'avance :-)

  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 trouveras la réponse en étudiant bien ce tuto: http://gfx.developpez.com/tutoriel/j...ing-threading/

    Grosso modo ce n'est pas l'intégralité de ton thread qui doit se dérouler dans l'EDT mais uniquement les modifications de composants graphiques (méthodes setXXX)

  3. #3
    Membre éclairé Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Par défaut
    Salut,

    J'ai déjà parcouru ce tuto, j'ai fais ces modif:

    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
    public void run()
    	{
    		final int [] finalInt =new int[1];
    		finalInt[0]=nombre;
    	    while(true)
    	    {
    	    	finalInt[0]++;
    	    	Runnable code=new Runnable() {
    	    		public void run() {
    	    			essai.getLabel().setText("The Number is : "+finalInt[0]);
    	    		}
    	    	};
    	    	try{
    	    		SwingUtilities.invokeAndWait(code);
    	    	}catch(InvocationTargetException ite) {ite.printStackTrace();}
    	    	catch(InterruptedException ie) {ie.printStackTrace();}
    			essai.setNombre(finalInt[0]);
    	    }
    	}
    En ce qui concerne la méthode run de la classe Calcul étendant Thread et

    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
    public void actionPerformed(ActionEvent arg0)
    	{
    		if(arg0.getActionCommand().equals("Start"))
    		{
    			calcul.start();
    		}
    		if(arg0.getActionCommand().equals("Pause"))
    		{
    			synchronized(calcul) {
    				try{
    					wait();
    				}catch(InterruptedException ie) {ie.printStackTrace();}
    			}
    		}
    		if(arg0.getActionCommand().equals("ReStart"))
    		{
    			synchronized(calcul) {
    				calcul.notify();
    			}
    		}
    	}
    Et tout se passe exactement de la même manière :-S
    J'ai compris le tuto, mais je ne vois pas où sont les erreurs de mon code :-S

    Merci pour ta réponse

Discussions similaires

  1. [Débutant] Aide intégration threads
    Par marcm89 dans le forum C#
    Réponses: 2
    Dernier message: 08/10/2013, 21h47
  2. Souci Fermer application Swing
    Par mouss4rs dans le forum Débuter
    Réponses: 2
    Dernier message: 03/07/2012, 18h06
  3. soucis lancement thread
    Par lostsoul dans le forum Général Java
    Réponses: 9
    Dernier message: 21/02/2012, 15h49
  4. Souci de thread avec une application côté persistance
    Par Lolitaaa dans le forum Persistance des données
    Réponses: 1
    Dernier message: 06/12/2011, 23h28
  5. Petit soucis avec Thread::Queue et une classe
    Par vodevil dans le forum Web
    Réponses: 16
    Dernier message: 09/06/2006, 21h41

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