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

avec Java Discussion :

Problème temporisation pour un dessin


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut Problème temporisation pour un dessin
    Bonjour à tous, étant débutant et n'aimant pas rester bloquer sur un problème (même si il est pas important), je vous expose mon problème.

    J'aimerais que lorsque j'appuie sur un bouton que j'ai crée, il se passe 10 fois une action spécifique (ici pas de problème) cependant j'aimerais que cela se fasse avec une certaine temporisation.

    Mais le problème ne se situe pas vraiment la puisque l'action que j'effectue est bien temporisé. Le seul problème est quand j'effectué l'action de "repeindre" mon dessin. Il ne se passe rien et le dessin n'est refait que lorsque mes 10 actions sont effectués, ce qui ne m'arrange pas.

    Voici l'action de mon bouton :

    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 event){		
     
    		float[][]m=null;
    		float[][]v=null;		
    		m=gp.G.toMatrix();
    		m=gp.G.norm(m);
    		v=gp.G.repartition();
    		gp.G.affiche2(v);
    		int i;
    		for(i=0;i<10;i++){
    			v=gp.G.multip(m,v);
    			gp.G.Agent(v);
    			gp.repaint();
                		try {
                    		Thread.sleep(10000); // millisecondes
               		} catch (InterruptedException e) {
                    		return;
                		}
    		}
    		gp.repaint();
    	}
    Quelqu'un aurait une idée ?

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Oui,

    ton Thread.sleep est exécuté par le thread EDT de Swing (et c'est ce thread là qui est chargé du rafraichissement)... Mais puisqu'il est mis en sleep, il ne peut plus rafraichir le GUI.

    Il faut créer un thread séparé afin de faire ce que tu as besoin, ou alors un javax.swing.Timer.

    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
     
        public void actionPerformed(ActionEvent event) {
            new Thread() {
                @Override
                public void run() {
                    float[][] m = null;
                    float[][] v = null;
                    m = gp.G.toMatrix();
                    m = gp.G.norm(m);
                    v = gp.G.repartition();
                    gp.G.affiche2(v);
                    int i;
                    for (i = 0; i < 10; i++) {
                        v = gp.G.multip(m, v);
                        gp.G.Agent(v);
                        gp.repaint();
                        try {
                            Thread.sleep(10000); // millisecondes
                        } catch (InterruptedException e) {
                            return;
                        }
                    }
                    gp.repaint();
                }
            }.start();
        }
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Super, ca marche parfaitement, merci beaucoup.

    Juste une chose que je ne comprends pas vraiment, c'est le @Override ?
    Ca sert à quelque chose ou c'est un genre de commentaire ?

    Sinon merci encore.

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par Kalmos2 Voir le message
    Juste une chose que je ne comprends pas vraiment, c'est le @Override ?
    C'est une annotation. ça sert à indiquer que la méthode qui est définie en dessous redéfini une méthode existante dans une des classes mères. Si aucune méthode ayant la même signature n'existe dans une des classes mères, ça fera une erreur de compilation.

    Regarde dans les nouveautés de Java 5 pour plus d'infos

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Puis-je arrêter mon programme uniquement en rappuyant sur mon bouton sans changer radicalement le code.

    Je ne vois pas comment placer simplement un stop()

  6. #6
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    pas besoin de stop...

    le thread va mourir tout seul dès que la méthode run sera finie d'exécutée
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Points : 23
    Points
    23
    Par défaut
    Pas pour ce code la, mais j'ai intégré le code sur une autre fonction, qui elle, peut s'exécuter à l'infini dans certain cas. J'aimerais donc pouvoir l'arrêter manuellement.

    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
    46
       	public void actionPerformed(ActionEvent event) {
            	new Thread() {
            		@Override
                		public void run() {
            		        float[][] m = null;
    		                float[][] v = null;
    				float[][] v2 = null;
                    		m = gp.G.toMatrix();
                    		m = gp.G.norm(m);
                    		v = gp.G.repartition();
    				v2 = v;
                    		v = gp.G.multip(m,v);
                        		gp.G.Agent(v);
                        		gp.repaint();
     
                    		while( test(v,v2) ) {
    					v2 = v;
                        			try {
                            			    Thread.sleep(300); // millisecondes
                        			} catch (InterruptedException e) {
                            			    return;
                        			}
                    			v = gp.G.multip(m,v);
    	                    		gp.G.Agent(v);
    	                    		gp.repaint();
     
                    		}
                    		gp.repaint();
                		}
            	}.start();
        	}
     
    	public boolean test(float[][]v,float[][]v2){
    		int i;
    		float m;
    		double j = 0.001;
    		for(i=0;i<gp.G.nl.size();i++) {
    			m=v[0][i]-v2[0][i];
    			m=Math.abs(m);
    			if( m > j ){
    				return true;
    			}
    		}
    		System.out.println("Fin test infini");
    		return false;
    	}

  8. #8
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par Kalmos2 Voir le message
    J'aimerais donc pouvoir l'arrêter manuellement.
    Il faut lui mettre une condition d'arrêt. La méthode #stop() est dépréciée.
    Le SwingWorker utilise une condition d'arrêt via la méthode #cancel(boolean) qui peut ensuite être testée via #isCancelled() dans le traitement. C'est plutôt une bonne solution.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

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

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. Problème XValues pour dessiner un graphe
    Par hebh dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/10/2011, 16h28
  3. Problème requete pour moteur de recherche
    Par vincedjs dans le forum Requêtes
    Réponses: 48
    Dernier message: 15/03/2006, 14h47
  4. Problème tableau pour une requête
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 07/10/2005, 20h21
  5. [C#] Quel controle pour le dessin + eviter clignotement
    Par JEG dans le forum Windows Forms
    Réponses: 10
    Dernier message: 08/10/2004, 11h28

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