Partage
  • Partager sur Facebook
  • Partager sur Twitter

le run de mon thread run pas :(

    9 octobre 2008 à 0:56:29

    Bonjour,
    j'ai encore un problème avec mon thread, auriez vous la gentilesse de m'aider encore une fois :)
    bon voila mon thread ne fais pas d'erreur il run, cependant il n'effectuait pas les tâches que j'ai mit dans le run alors j'ai passer le tout au debugger et il n'entre même pas le run du thread pourtant jai bien mit mon start.
    je vous montre

    voici l'endroit ou le thread est instancier et puis ou il est supposer demarrez
    else if (objet == boutonAttaqueAuHasard) {
                    int nbElement = vecteur.getNbElement();
                    AttaqueAleatoire t = new AttaqueAleatoire(vecteur, nbElement);
                    t.start();
    


    et voici les constructeur au cas ou
    public AttaqueAleatoire(Vecteur v, int pNbElement) {
            ForceAttaque = Util.saisirEntier("Quelle est la force d'attaque ?");
            NombreAttaque = 
                    Util.saisirEntier("Combien d'attaque désiré vous lancez ?");
            this.v = v;
            nbElement = pNbElement;
        }
    
        public AttaqueAleatoire(int pForceAttaque, int pNombreAttaque, Vecteur v, int pNbElement) {
            ForceAttaque = pForceAttaque;
            NombreAttaque = pNombreAttaque;
            this.v = v;
            nbElement = pNbElement;
        }
    


    merci de bien vouloir m'aider a cerner le problème :)
    • Partager sur Facebook
    • Partager sur Twitter
      9 octobre 2008 à 3:07:05

      Est-ce qu'il appelle start(), au moins? Je veux dire, entre-t-il dans le else if?
      • Partager sur Facebook
      • Partager sur Twitter
        9 octobre 2008 à 6:53:16

        Bonne question... Montres tout ton code... Même ta méthode run().
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2008 à 14:46:26

          j'ai trouver le problème bah en faite pas vraiment parce que je sais pas pourquoi sa faisait sa , mais au moins il entre dans ma methode run maintenant :)

          cependant j'aurais une autre question concernant toujours mon thread j'aimerai pouvoir changer ma liste a tous le fois que mon thread change la valeur energie d'un des personnages dans le vecteur ou qu'il supprime un des personnages.
          Parce que la il le fait juste a la fin de toute le thread . Et comme toute est déclarer private je sais pas comment faire pour pouvoir avec sa a partir de la boucle for.

          pour ce qui est du else if oui il y entre parce que c'est une condition de actionPerformed si J'appuie sur le bouton attaqueAleatoire le code est executer
          public void run() {
                  Object[] temp;
                  int i = 0;
                  int energie;
                  temp = v.getTable();
                  tablePersonnage = new Personnage[v.getNbElement()];
                  while (i < v.getNbElement()) {
                      tablePersonnage[i] = (Personnage)temp[i];
                      i++;
                  }
                  try {
                      for (i = 0; i < NombreAttaque; i++) {
                          int nbreRandom = aleatoire();
                          energie = tablePersonnage[nbreRandom].getEnergie();
                          energie = energie - ForceAttaque;
                          if (energie <= 0) {
                              v.removeI(nbreRandom);
                          } else {
                              tablePersonnage[nbreRandom].setEnergie(energie);
                          }
                          v.trier();
          
          
                      }
                  } catch (MyindexOutofBoundsException e) {
                      System.out.println(e.getMessage());
                  }
              }
          


          else if (objet == boutonAugmenterEnergie) {
                          int indice=listeObjets.getSelectedIndex();
                          tablePersonnages[indice].resetEnergie();
                      } else if (objet == boutonCrier) {
                          int indice;
                          indice = listeObjets.getSelectedIndex();
                          tablePersonnages[indice].crier();
                         JOptionPane.showMessageDialog(null, tablePersonnages[indice].crier());
                      } else if (objet == boutonAttaqueAuHasard) {
                          int nbElement = vecteur.getNbElement();
                          AttaqueAleatoire t = new AttaqueAleatoire(vecteur, nbElement);
                          t.start();
                          listeObjets.setListData(tablePersonnages);
                      }
          


          et une autre petite question j'ai lu ton tutoriel cysboy merci sa ma beaucoup aidé :p
          mais dans le chapitre du thread tu fais un setThread pourquoi ? on peut modifier le thread ?

          merci a tous de m'aider :)
          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2008 à 15:01:39

            Je n'ai pas très bien compris ton problème mais concernant le setThread, si tu regarde plus attentivement, tu peux voir qu'elle sert a donnée un autre thread à mon objet et ainsi pouvoir voir quel est les état de mon instance et du fameux thread en même temps...
            • Partager sur Facebook
            • Partager sur Twitter
              9 octobre 2008 à 15:25:47

              D'accord merci,
              pour le problème je t'explique j'ai une liste de personnage dans ma classe main , je peux ajouter des personnage et ils sont tous gerer dans un vecteur seulement pour être traiter ensuite dans la liste je dois les affecter a un tableau. Sauf que celui si est déclarer priver alors si je n'est pas acces ni a la liste , ni au tableau à partir du thread . Comment je pourrai faire pour raffraichir ma liste a partir de la boucle for de mon thread ? Afin qu'elle soit raffraichi a chaque fois qu'un personnage se prend une attaque.

              • Partager sur Facebook
              • Partager sur Twitter
                9 octobre 2008 à 16:11:49

                Déjà, si tu as une variable déclaré private, fait un accesseur pour accéder aux données convoitées...
                Lorsque tu créer ton thread, si tu veux pouvoir travailler avec ton instance, tu peux passer l'instance de la variable à ton thread : tu pourras donc utiliser l'accesseur dans ton thread...
                • Partager sur Facebook
                • Partager sur Twitter
                  9 octobre 2008 à 16:33:15

                  Tu fais moins de fautes d'orth dans ton code que dans tes postes
                  Evite de confondre les 'tout' avec 'toute' ca sera bcp plus agreable a lire ...

                  sinon quant a ton probleme je vois pas ce qui me dit que le code de ton if est vraiment executer ...

                  sinon si tu veux que ton vector sois modifie par tout le monde (je suis pas sur que se soit ca etant donne que j'ai beaucoup de mal a te comprendre) suffit juste de passer le vector sans faire de copie, tout les Thread auront la meme reference et la moindre modification sera visible par tout les Threads...


                  copie colle le code entier du listener qui va lancer les threads ainsi que la classe AttaqueAleatoire
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 octobre 2008 à 21:14:52

                    ok merci,
                    pour les fautes j'essayerai de faire mieux.Peut-on faire un set sur un tableau ? J'imagine que oui j'essaye cela et je vous en reparle je crois que sa pourrait m'éviter bien des problèmes :)
                    pour ce qui du listener et bien je te donne la certitude qu'il est exécuté car quand je clique sur le bouton et bien le code a l'intérieur du else if et belle et bien exécuté.Si jamais mon set de tablePersonnage ne règles pas mon problème je te montrerai le code du listener en entier.

                    merci à tous pour votre aide
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 octobre 2008 à 10:52:50

                      que veux tu dire par un set ?
                      sinon pour les fautes je suis pas parfait mais sur certain mot ca complique enormement la comprehension :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 octobre 2008 à 14:10:42

                        Par set je voulais dire mutateur, mais sa n'a pas marcher si quelqu'un a un autre idée se serait grandement aprécié.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 octobre 2008 à 14:12:51

                          Montres-nous ton code parce qu'un mutateurs sur un tableau... Faut voir comment tu as fait ça... :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 octobre 2008 à 14:43:41

                            et bien comme j'ai dit sa n'a pas marcher mais voici la façon que j'ai essayé de le faire
                            synchronized public void setTablePersonnages(Personnage personne, int indice){
                                   tablePersonnages[indice] = personne;
                                }
                            


                            mais j'avais pas penser que si mon tableau n'était pas dans un constructeur sa ne pouvait pas marcher.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 octobre 2008 à 15:05:22

                              Donne tout ton code...
                              Parce que là, plusieurs question se posent :
                              - As-tu initialisé ton tableau ?
                              - As-tu un NullPointerException ?
                              - As-tu un IdexOutOfBoundsException ?
                              -... !

                              Plus de précision !
                              Sinon, essaies avec un ArrayList...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 octobre 2008 à 14:24:40

                                ca m'etonnerais que changer de classe change quoi que se soit

                                avec les Vector tu n'as pas besoin de synchronized, toutes les fonctions de cette classe le sont deja ^^
                                • Partager sur Facebook
                                • Partager sur Twitter

                                le run de mon thread run pas :(

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown