Bonsoir à tous


j'essaie de développer une aplli ftp en java mais je coince sur la mise en place d'un jTree affichant la liste des répertoires d'un lecteur/DisqueDur

En fait dans mon application, j'ai mis une liste contenant la liste des lecteurs/Disques disponibles sur le PC (C:/, D:/, ...) ainsi qu'un jTree devant afficher en fonction de cette sélection la liste des répertoires le contenant (évidement que le 1er Niveau au départ et avec expansion si on clique sur un répertoire ou clique sur l'icône d'expansion)


J'ai parcouru un peu tout le forum Java, mais je n'ai jamais réussi à implanter certaines méthodes données. Donc j'ai essayé de faire de ce qui y était mis.

voici mon Frame de l'état actuel du FTP :

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
44
45
46
47
48
49
50
51
52
53
54
public class FrameFTP extends javax.swing.JFrame {
 
 
   protected DefaultMutableTreeNode root;
   protected TreeModel model;
 
    /** Creates new form FrameFTP */
    public FrameFTP() {
        initComponents();
        SwingUtilities.updateComponentTreeUI(this);
        //jComboBoxLecteurs.addActionListener(this);
 
        File[] listeRacine = File.listRoots();        
 
        for (int i = 0; i < listeRacine.length; i++) {
 
            jComboBoxLecteurs.addItem(listeRacine[i]);
        }
 
        File racineSelect = new File(jComboBoxLecteurs.getSelectedItem().toString());
 
 
        MutableTreeNode root = new DefaultMutableTreeNode(jComboBoxLecteurs.getSelectedItem().toString());
        construireTree(racineSelect);
        DefaultTreeModel model = new DefaultTreeModel(root);
        jTreeRepsLocal = new JTree(root);
        jTreeRepsLocal.setExpandsSelectedPaths(true);
 
    }
 
/** Fonction de contruction d'un arbre */
private void construireTree(File racine) {
        DefaultMutableTreeNode tempNode = new DefaultMutableTreeNode(racine);
	trouverSousRep(tempNode, racine);
	root.add(tempNode);
 
        jTreeRepsLocal.setModel(new DefaultTreeModel(root));
	SwingUtilities.updateComponentTreeUI(jTreeRepsLocal);
    }
 
/** Fonction qui trouve le sousRep du repertoire parent */
private void trouverSousRep(DefaultMutableTreeNode currentNode, File directory) {
	File fileList[] = directory.listFiles();
	if (fileList == null)
            return;
	for (int i = 0; i < fileList.length; i++)
            if (fileList[i].isDirectory())
                currentNode.add(new DefaultMutableTreeNode(fileList[i]) {
                public String toString() {
                    return ((File) getUserObject()).getName();
                }
                });
    }
}
les codes des méthodes d'écoute, celui pour la sélection dans la liste des lecteurs qui change le jTrre en fonction du lecteur sléectionné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 private void jComboBoxLecteursActionPerformed(java.awt.event.ActionEvent evt) {                                                  
// TODO add your handling code here:
        File racineSelect = new File(jComboBoxLecteurs.getSelectedItem().toString());
        construireTree(racineSelect);
        jTreeRepsLocal = new JTree(root);
    }
la méthode pour l'expansion :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void jTreeRepsLocalTreeExpanded(javax.swing.event.TreeExpansionEvent evt) {
// TODO add your handling code here:
        setCursor(new Cursor(3));
		DefaultMutableTreeNode selectedNode =
			(DefaultMutableTreeNode) evt.getPath().getLastPathComponent();
		for (int i = 0; i < selectedNode.getChildCount(); i++) {
			DefaultMutableTreeNode childNode =
				(DefaultMutableTreeNode) selectedNode.getChildAt(i);
			if (childNode.isLeaf())
				trouverSousRep(childNode, (File) childNode.getUserObject());
		}
 
		setCursor(new Cursor(0));
    }
le soucis, c'est qu'avec ce code, lorsque je lance le projet, avec netbeans, je récupère ce message :
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at appliftp.FrameFTP.construireTree(FrameFTP.java:88)
at appliftp.FrameFTP.jComboBoxLecteursActionPerformed(FrameFTP.java:370)
at appliftp.FrameFTP.access$200(FrameFTP.java:24)
at appliftp.FrameFTP$4.actionPerformed(FrameFTP.java:210)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1197)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1268)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:100)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:88)
at javax.swing.DefaultComboBoxModel.addElement(DefaultComboBoxModel.java:126)
at javax.swing.JComboBox.addItem(JComboBox.java:690)
at appliftp.FrameFTP.<init>(FrameFTP.java:40)
at appliftp.FrameFTP$6.run(FrameFTP.java:407)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
je ne vois pas comment corriger ce problème
le 1er "at ...." renvoi à la méthode contruireTree sur j'ai uploadé le fichier ici


si quelqu'un veut bien m'aider, merci par avance