Parcours d'arbre java swing

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

Parcours d'arbre java swing

par Rockleader » 12 Mar 2015, 14:24

Bonjour à tous et merci d'avance pour l'aide que vous pourriez m'apporter.


Je vous explique mon soucis; je dispose d'une fonction qui à partir d'un chemin donné va me construire une arborescence d'arbre composé de dossiers

L'arborescence se construit correctement.


Par la suite lorsque je clique sur les dossiers de mon arbre; celui ci doit me retourner dans un tableau la liste des fichiers à l'intérieur.

Là aussi ça marche..mais seulement sur deux niveaux.

Je m'explique


Si je donne comme chemin

d1/

Alors le premier niveaux de l'arbre d1 affichera bien ses fichiers.

lorsque je déploie mon arbre

d1/d2
d1/d4


d2 et d4 afficheront bien les fichiers qu'ils contiennent.

Mais si je vais plus loin

d1/d2/d3

d3 n'affichera plus rien et va me généré une erreur dans la console.

L'arborescence est correcte; j'entends par là que si je déplie mon arbre je verrais bien l'ensemble des sous dossiers de d3.





Voici comment j'effectue la construction.

Etant donné qu'il y a de la récursivité je pense que le soucis doit venir de mon modèle qui doit rester celui du premier niveau d'arbre générant ensuite des nodes inconnu même s'ils sont affichés...enfin je sais pas vraiment en fait...je vous laisse jeter un coup d'oeil


Code: Tout sélectionner
 private void testArborescense(String path,javax.swing.tree.DefaultMutableTreeNode treeNode1)
     {
         File repertoire = new File(path);
         String init=path;
         String[] files;
         files=repertoire.list();
         int i;
          for(i=0;i<files.length;i++){
              String newPath=init+"\\"+files[i];
              File f2=new File(newPath);
              javax.swing.tree.DefaultMutableTreeNode treeNode2 = new javax.swing.tree.DefaultMutableTreeNode(f2.getName());
              if(f2.isDirectory())
              {
                  treeNode1.add(treeNode2);
                  testArborescense(newPath,treeNode2);
                  jTree1.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));
              }
             
        jScrollPane4.setViewportView(jTree1);
          }
           
     }



Voilà pour la construction de l'arbre...l'idée c'est donc d'ajouter tous les dossiers dans l'arbre.


Et voilà comment j’interagis avec mon arbre

Code: Tout sélectionner
 //Listener sur la sélection dans l'arbre
        jTree1.addTreeSelectionListener(new TreeSelectionListener() {

  public void valueChanged(TreeSelectionEvent e) {
   
    javax.swing.tree.DefaultMutableTreeNode obj = (javax.swing.tree.DefaultMutableTreeNode) jTree1.getLastSelectedPathComponent();
    String s;
    if(obj.toString()==firstDirectory)
    {
       s=path2+"\\"+obj.toString();
    }
    else
    {
       s=path+"\\"+obj.toString();             
    }
   
    System.out.print("\n"+s+" contient les fichiers: \n");
    File f2=new File(s);
    String[] listes=f2.list();
    for(int i=0;i<listes.length;i++)
                {
                   System.out.print(listes[i]+" ");
                }
    if(f2.isDirectory())
    {             
        updateTab(loadTabData(f2,s));
    }
   
  }
});
       
    }


En ce qui concerne l'updateTab je peux vous assurer que le soucis ne vient pas de là puisqu'il met bien les données à jour pour les premiers noeuds.

Au niveau de la chaine résultat s elle contient à chaque étape le chemin absolu vers le sous dossiers qui a été cliqué donc pas de soucis venant de là non plus; ce qui peut se vérifier avec la trace en console.

En revanche lorsque je veux lister les fichiers on obtiens le même problème dès le clic sur un niveau 2 d'arbre le programme en console crash.

Pour reprendre l'exemple si dessus ça me donnerait à l'affichage

d1/d2/d3 contient les fichiers;
et là une série de message d'erreur commençant par un message de pointeur null qui j'imagine répercute la première erreur en cascade sur tout un tas de trucs...
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 12 Mar 2015, 19:11

Tu ne peux pas passer en mode debug, tu as une indication avec un pointeur à NULL.
Que sont path et path2 dans valueChanged(TreeSelectionEvent e) ? on dirait des variables globales.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 12 Mar 2015, 19:24

path et path2 sont des string déclaré final dans le main.

Code: Tout sélectionner
 final String path="C:\\Users\\rock\\Desktop";
   final String path2="C:\\Users\\rock";
final String firstDirectory="Desktop";


Sa me permet de ne pas avoir un Desktop\\Desktop pour la première itération tout simplement.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 16:31

par joel76 » 12 Mar 2015, 19:32

Oui, mais alors sont -ils mis à jour à chaque fois que tu explores un répertoire ? C'est sans doute la ton erreur.

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 12 Mar 2015, 20:21

Ah oui je vois ce que tu veux dire; maintenant que tu me le fais remarquer oui ça paraît assez logique.

Sa marche pour le premier niveau car j'ai path; pour le second car j'ai path2...mais après je saute un dossier et du coup je n'ai plus le dossier en chemin absolu.



Je vais essayer de voir si je peux confirmer le problème.

EDIT

C:\Users\rock\Desktop

C:\Users\rock\Desktop\Archi

C:\Users\rock\Desktop\TP2

voilà d'où vient le problème TP2 se trouve dans Archi.


Merci de m'avoir aidé à identifier le problème je devrais pouvoir me débrouiller maintenant. :lol3:


EDIT 2: Bug corrigé; merci beaucoup.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 7 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite