[JTree] Null Pointer Exception
Bonsoir,
Je suis arrivé à faire fonctionné mon jTree, enfin !
Ce qui m'embête maintenant c'est quand je fait ceci dns mon main:
Code:
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();
} |
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:
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;
} |
La ou ça plante c'est dans cette classe en cours de développement:
Code:
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;
} |
Cela me provoque un null pointer exception alors que mes variables sembles correct et que lorsque je teste en manuelle tout s'affiche correctement.
Voici pour information la jolie erreur qui apparaît !
Citation:
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)
Par contre j'aimerais savoir pourquoi. Et corriger ce qui doit l'être ! :roll:
Merci.