Bonsoir,
Je suis arrivé à faire fonctionné mon jTree, enfin !
Ce qui m'embête maintenant c'est quand je fait ceci dns mon main:
J'appelle cette classe pour cherché un chemin. Cette partie est corect car je voie bien dans la classe suivante les valeurs du répertoire s'afficher quand je fais un System.out.println().
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 private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { /* * Bouton du menu Fichier -> Créer -> Dossier Rpg */ //Crée une inatance de ObjFileChooser ObjFileChooser objChooser = new ObjFileChooser(); //Crée l'objet JFileChooser objChooser.createJFileChosser(); //Créer une instance ObjTree ObjTree objTree = new ObjTree(); objTree.setFileSelected(objChooser.getActionJFileChooser()); objTree.affFileTree(); }
La ou ça plante c'est dans cette classe en cours de développement:
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 package appliClasses; import java.io.File; import javax.swing.JFileChooser; public class ObjFileChooser { /* * Méthode : Fonction * Action : Créer un jFileChooser * Reçois : Rien */ public void createJFileChosser() { //Les options choix.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); choix.setMultiSelectionEnabled(false); action = choix.showOpenDialog(null); } /* * Méthode : Getter * Action : Renvoie le répertoire ou le fichier sélectionné * Reçois : Rien */ public File getActionJFileChooser() { //Si c'est le bouton enregistrer if(action == JFileChooser.APPROVE_OPTION) { //On retourne le dossier enregistrer pathSelect = choix.getSelectedFile(); } //Retourne le dossier enregistrer return pathSelect; } /* * Les champs de la classe */ private File pathSelect = new File(""); private JFileChooser choix = new JFileChooser(); private int action; }
Cela me provoque un null pointer exception alors que mes variables sembles correct et que lorsque je teste en manuelle tout s'affiche correctement.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124 package appliClasses; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import java.awt.Dimension; import java.io.File; public class ObjTree { /* * Méthode : Setter * Action : Attribuer un nom de noeud * Reçois : Un nom d'un noeud */ public void setNameNode(String nameRealNode) { this.nameNode = nameRealNode; } /* * Méthode : Setter * Action : Attribuer un nom de noeudparent * Reçois : Le nom d'un noeud parent */ public void setParentNode(DefaultMutableTreeNode ParentNode) { this.parentNode = ParentNode; } /* * Méthode : Setter * Action : Attribuer un File à une variable * Reçois : Le File sélectionné */ public void setFileSelected(File fileSelect) { this.fileSelected = fileSelect; } /* * Méthode : Fonction * Action : Créer un JTree * Reçois : Rien */ public JTree createJTree() { //Affiche un JTree() manitulable (Handle) myTree.setShowsRootHandles(true); //Modifie les caractéristiques du JScrollPane myScrollPane.setAutoscrolls(true); myScrollPane.setPreferredSize(new Dimension(200, 150)); //Affiche dans le JScrollPane le JTree myScrollPane.setViewportView(myTree); //Crée une instance DefaultMutableTreeNode() parentNode = new DefaultMutableTreeNode("Rpg"); //Crée une instance modèle DefaultTreeModel() treeModel = new DefaultTreeModel(parentNode); //Affiche le noeud myTree.setModel(treeModel); return myTree; } /* * Méthode : Fonction * Action : Ajouter un noeud * Reçois : Un nom de noeud et le nom d'u noeud parent */ public DefaultMutableTreeNode addNode() { //Crée une instance de DefaultMutableTreeNode DefaultMutableTreeNode node = new DefaultMutableTreeNode(nameNode); //Si le parent est null if(parentNode == null) { //On crée un parent ((DefaultMutableTreeNode)treeModel.getRoot()).add(node); } else { //Sinon on crée un enfant dont le parent est node parentNode.add(node); } return node; } /* * Méthode : Fonction * Action : Afficher le contenu d'un répertoire dans un JTree * Reçois : Un File() */ public void affFileTree() { //Crée une instance de ObjTree ObjTree obj = new ObjTree(); //Tant qu'il reste des fichier ou dossier à afficher for(int i = 0; i < fileSelected.list().length; i++) { //Crée un membre à ajouter obj.setNameNode(fileSelected.listFiles()[i].getName()); obj.setParentNode(null); obj.addNode(); } myTree.expandRow(0); } /* * Les champs de la classe */ private JScrollPane myScrollPane = new JScrollPane(); private JTree myTree = new JTree(); private DefaultMutableTreeNode parentNode; private DefaultTreeModel treeModel = null; private File fileSelected; private String nameNode; }
Voici pour information la jolie erreur qui apparaît !
Par contre j'aimerais savoir pourquoi. Et corriger ce qui doit l'être !Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at appliClasses.ObjTree.addNode(ObjTree.java:89)
at appliClasses.ObjTree.affFileTree(ObjTree.java:113)
at jForm.jMainForm.jMenuItem2ActionPerformed(jMainForm.java:227)
at jForm.jMainForm.access$000(jMainForm.java:30)
at jForm.jMainForm$1.actionPerformed(jMainForm.java:152)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:374)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:829)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:873)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6108)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:5873)
at java.awt.Container.processEvent(Container.java:2105)
at java.awt.Component.dispatchEventImpl(Component.java:4469)
at java.awt.Container.dispatchEventImpl(Container.java:2163)
at java.awt.Component.dispatchEvent(Component.java:4295)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
at java.awt.Container.dispatchEventImpl(Container.java:2149)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4295)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
Merci.
Partager