Bonjours,
j'écris un petit programme de généalogie. Mais j'ai un bug qui est pour moi complètement incompréhensible qui n'apparais que dans une situation bien précise:
Ma variable change de référence entre 2 instructions !
Quand je créé l'enfant d'une personne il y a 2 moyens soit en passant pour un wizard (Qui est le père ? La mère ? Les donné ? ...) et ça marche parfaitement. Soit je passe par le graph de l'arbre (j'utilise la librairie JGraphx pour le générer) où je fait un clique droit sur la cellule de la personne à qui je veux ajouter l'enfant et je choisis l'option dans le menu contextuel.
Et c'est là que j'ai un problème, la création se fait sans erreur apparente (aucun message d'erreur) mais lorsque je met a jour le graph j'ai un belle java.lang.StackOverflowError ... Supposant que c'était une erreur dans le code de la création de l'enfant suis partis à sa recherche en mode débug et c'est là que je bloque, j'ai trouver où se situe le bug, sauf que je comprend pas pourquoi il apparais. Voici le morceaux de code en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
//la ref de personne est #1902
      personne=null;
      personne=new Perso(parent); //On crée un nouveau perso.
//jusque ici pas de problème toute les variables sont bonne. La ref de perso est  maintenant #1903 
      personne.nouvEntree(identCree,parent,famille.getNom());
//et ici c'est la m... personne prend le valeur du père ! Et la ref devient #2061 !!! alors que normalement ça devrait être 1903 .... du coups j'obtiens un boucle infinie parce que les graphes sont générer par récursion...
du coups je suppose que ça vient de la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public boolean nouvEntree (String idcree,Frame Fmain,String nom1 ){
//on est bien dans la ref #1903 et on l'édite...
           this.id=idcree;
            Qperso personne =new Qperso(Fmain,nom1); //Crée la boîte de dialogue avec les questions.
           Fmain=null;
            //Récupérons les informations :
           if (personne.iserror())
               {return false;}
            update(personne);
            personne.dispose();
           return true; // on arrive ici sans problème ...et on est toujours dans #1903 et la fonction revois 		      // true ... 
             }
Mais là je vois mal d'où est le problème... surtout que le morceau de code où se situe le problème fait partie d'une fonction qui est utiliser à chaque création d'un enfant, et donc je n'ai un changement de référencer que quand je créé un enfant d'un parent célibataire (parce que en plus si le parent à un conjoint ça marche !) à partir d'une cellule d'un graphe ! Dans les autres cas, la référence ne change pas ! (je tester ça de la même manière, avec le mode debug)....

Bref je sais pas trop quoi faire... si quelqu'un n'a ne serais-ce qu'une idée ce serait génial ...

Je suis sur ubuntu 9.04 64bit, j'utilise netbeans et java jdk 1.6.0.14 ...