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

Concurrence et multi-thread Java Discussion :

utilisation et déclaration d'un thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut utilisation et déclaration d'un thread
    Bonjour,

    j'ai beau chercher dans la fac et dans les exemples de Valère VIANDIER , mais je ne comprend pas pourquoi mon Thread n'est pas pris en compte.

    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
          Thread setTime;
    
              public void actionPerformed(ActionEvent e) 
        {
    //         JFrame frame1 = new JFrame("---Snake---");
            frame1.setSize(400,400);
            setTime=new Thread();
            
            if(e.getActionCommand().equals("DEMARRER"))
            {
                frame1.addKeyListener(new KeyAdapter() 
                {
                    public void keyPressed(KeyEvent e) 
                    {
                        int keyCode = e.getKeyCode();
            
                        if ((keyCode == e.VK_LEFT) &&(!right)){left = true; up = false; down = false;if(!started)started=true;}
                        if ((keyCode == e.VK_RIGHT) && (!left)){right = true; up = false; down = false;if(!started)started=true;}
                        if ((keyCode == e.VK_UP) && (!down)){ up = true; right = false; left = false;if(!started)started=true;}
                        if ((keyCode == e.VK_DOWN) && (!up)){down = true; right = false; left = false;if(!started)started=true;}
                        if(compteur==0)
                        {
                            deplacement();
                            compteur++;
                            setTime.start();
                        }
                    }
                });
    
                x[0]=91;
                y[0]=91;
                button.setEnabled(false);
                button1.setEnabled(true);
                frame1.setContentPane(new Affiche(2,0,true,x,y,0));
                frame1.setLocationRelativeTo(frame1.getParent());
                frame1.setBackground(Color.white);
            
                //Display the window.
                frame1.pack();
                frame1.setVisible(true);
            }
    }
    dans le méthode déplacement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          while(stop==1)    { // j'éffectue différentes opérations
    
       //a la fin des opérations, je souhaite faire un sleep                     
    try{setTime.sleep(level);}            
     catch(InterruptedException e){}
     }
    Je reçois l'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unreported exception java.lang.InterruptedException; must be caught or declared to be thrown
                                                    setTime.sleep(level);
    J'ai essayé sous d'autres formes, mais je ne trouve pas la bonne.
    Qu'est-ce que je fais de faux ??

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    1. Tu ne démarres pas ton Thread (je ne vois pas l'appel de la méthode start().
    2. Ton Thread ne comporte aucun code : soit tu hérites de Thread et tu redéfinis la méthode run(), soit tu lui passes un objet Runnable en paramètre...
    3. La méthode sleep() est statique, et tu ne dois pas l'utiliser comme cela mais l'appeller de manière statique ( Thread.sleep(2000); ).
    4. La méthode sleep() renvoit une exception, tu dois donc la traiter (Voir la FAQ : Exception ... must be caught ... ?)

    a++

  3. #3
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Je me suis gouré en faisant du copier coller, j'ai modifié mon code.
    Je ne comprend pas vraiment ce que tu veux dire par mettre sleep en statique ??

    Le code modifié fonctionne, sauf que j'ai l'erreur fréquente qu'il n' affiche pas les changements, mais seulement une fois que le pgm est terminé.
    Jvais aller voir comment modifier ça.
    N'est -il pas suggérer d'utiliser la classe Timer dans mon cas ??

    Merci pour l'aide

  4. #4
    Membre chevronné Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Par défaut
    Citation Envoyé par je®ome
    N'est -il pas suggérer d'utiliser la classe Timer dans mon cas ??
    pour faire quoi au juste? j'ai pas bien compris ton code.

  5. #5
    Membre éclairé Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Par défaut
    C'est bizarre comment tu instancies ton thread .
    Je pense que ta méthode dois gérer les exceptions de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void actionPerformed(ActionEvent e) throws Exception
    .
    Sinon je pense que ton code est bon, faudrait voir le reste.

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Citation Envoyé par je®ome
    Je ne comprend pas vraiment ce que tu veux dire par mettre sleep en statique ??
    Non il ne suggere pas de mettre sleep en statique, il dit que dans la classe Thread, la methode sleep(int) est statique, c'est à dire que tu n'es pas obligé d'instancier la classe Thread pour l'utiliser...
    un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try
    {
      Thread.sleep(30);
    }catch (Exception e)
    {
      System.out.println("fichtre, mon sleep n'a pas marché !");
    }
    note bien le try catch, qui est obligatoire, sleep generant des exceptions si il s'est mal passé..

    Bien à toi

    mavina

Discussions similaires

  1. Problème d'utilisation du ShowMessage dans un Thread
    Par ero-sennin dans le forum Langage
    Réponses: 7
    Dernier message: 07/10/2008, 09h32
  2. comment utiliser les lock dans les threads ?
    Par skad dans le forum Général Python
    Réponses: 2
    Dernier message: 15/07/2008, 14h28
  3. Utilisation des mutex et des threads
    Par Chen norris dans le forum SDL
    Réponses: 4
    Dernier message: 31/08/2007, 00h00
  4. Réponses: 26
    Dernier message: 13/12/2006, 07h35
  5. [C#] Utilisation des données dans un Thread
    Par Seth77 dans le forum C#
    Réponses: 12
    Dernier message: 24/10/2006, 14h14

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