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 :

[Thread] Problème de lancement


Sujet :

AWT/Swing Java

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut [Thread] Problème de lancement
    Je n'arrive pas à lancer un thread. En fait, je veux que ce thread fasse un appel répété de 2 méthodes, séparés par 3 secondes de pause. J'ai donc un code comme ceci :
    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
     
    public class Interface extends JFrame implements KeyListener,ActionListener,MouseMotionListener,Runnable{
     
    public Thread vie;
    [...]
     
    public void actionPerformed(ActionEvent e) {
    	Object o = e.getSource();
     
    	/*
    	 * Action sur le bouton pour faire vivre la population
    	 */
    	if(o==boutonVie){
    		vie=new Thread();
    		vie.start();
    		vie.run();
    	}
     
    }//fin du action performed
     
    public void run(){
    	try{
    		while(grille.nbAmibe!=1){
    			info.append(grille.vivre());
    			affichageInfo();
    			Thread.sleep(3000);
    		}
    	} catch (InterruptedException IE) {}
    }
     
    }//fin de classe
    Quand je clique sur mon bouton vivre, il ne se passe rien, le thread ne semble pas partir. Alors que normalement, la méthode grille.vivre() génère un grand nombre de modifications en fond.

  2. #2
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    vu que tu as une methode "bloquante" dans le code run() tu devrais theoriquement synchoniser ce code. par ex. synchronized void run(). ça devrait solutionner...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    euh, là je suis largué. tu peux expliquer le syncronized? merci

  4. #4
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Citation Envoyé par michaeljeru
    [...]

    public void actionPerformed(ActionEvent e) {
    Object o = e.getSource();

    /*
    * Action sur le bouton pour faire vivre la population
    */
    if(o==boutonVie){
    vie=new Thread(this); // ici tu envoies le thread sans interface, ajoute l'objet courant this
    vie.start();
    //vie.run();

    }

    }//fin du action performed

    public synchronized void run(){ // c'est tout
    try{
    while(grille.nbAmibe!=1){
    info.append(grille.vivre());
    affichageInfo();
    Thread.sleep(3000); // cette methode est dite "bloquante"
    }
    } catch (InterruptedException IE) {}
    }


    }//fin de classe

    [/code]

    Quand je clique sur mon bouton vivre, il ne se passe rien, le thread ne semble pas partir. Alors que normalement, la méthode grille.vivre() génère un grand nombre de modifications en fond.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    bon, j'ai rajouté le synchronized. Le problème qui se pose est que le programme sort une exception lors du déplacement d'élément, sur une ligne qui manipule le n° de case courante de l'élément, arrive une NullPointerException, comme si le thread était trop lent et que "le temps qu'il arrive", l'élément avait déjà été déplacé...
    je tiens à préciser que le reste du code fonctionne sans problème, l'emplacement de cette erreur est donc d'autant plus étonnant.
    NB : Sans ça, je n'ai pas de répétition de l'appel de ma fonction info.append(grille.vivre());, mais cela est peut être dû à l'exception qui bloque alros le processus...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Par défaut
    personne pour m'aider ?

Discussions similaires

  1. Thread--> problème avec ThreadProc
    Par stof dans le forum MFC
    Réponses: 33
    Dernier message: 08/06/2005, 13h47
  2. [Eclipse 3.0.1]problème de lancement d'eclipse
    Par sehaba dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 05/04/2005, 10h09
  3. [Plugin] Problème de lancement
    Par relivio dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 03/08/2004, 14h34
  4. [Kylix] Problème de lancement
    Par jaguarwan dans le forum EDI
    Réponses: 1
    Dernier message: 21/02/2004, 22h40
  5. [Install] Problème de lancement sous debian sid
    Par SoaR245 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/02/2004, 10h01

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