Bonjour,
dans mon programme java lorsque je clique sur un bouton de mon interface je lis un fichier XML et une JList() est remplie avec les valeurs d'un attribut "id" des noeuds "script" de mon fichier XML.
Pour éviter d'avoir des noeuds redondants chaque fois que je clique sur le bouton, je cherche à vider le contenu de cette JList. Mais malheureusement, cela déclenche une java.lang.ArrayIndexOutOfBoundsException
Code java : 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 private DefaultListModel<String> lm = new DefaultListModel<>(); private JList<String> jListID = new JList<>(); private void display(Node node) { displayNode(node); if (node.hasChildNodes()) { NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { display(children.item(i)); } } } private void displayNode(Node node) { if (node!=null) { if (node.getNodeName().equals("script")) { nodeList.add(node); } } } /** * Lecture du fichier XML */ public void readXMLFile() { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder parser = factory.newDocumentBuilder(); Node document = parser.parse(INPUT_FILE); display(document); lm.clear(); // suppression du contenu de la liste => Exception setElements(); // mise à jour du contenu de la liste } /** * * @param nodeList */ private void setElements() { for (Node n : nodeList) { lm.addElement( n.getAttributes().getNamedItem("id").getNodeValue() ); } jListID.setModel(lm); }
J'ai remarqué que cette exception est levée si un des éléments est sélectionné. Si j'ajoute un jListID.clearSelection() avant le lm.clear(), l'exception se déclenche sur le clearSelection().
Voici l'exceptionComment sortir de cette impasse ?Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:371)
at java.util.ArrayList.get(ArrayList.java:384)
at monApplication.MaClasse$1.valueChanged(MaClasse.java:55)
at javax.swing.JList.fireSelectionValueChanged(JList.java:1798)
at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1812)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:184)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164)
at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(DefaultListSelectionModel.java:677)
at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(BasicListUI.java:2601)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
at javax.swing.DefaultListModel.clear(DefaultListModel.java:510)
at monApplication.MaClasse.readXMLFile(MaClasse.java:134)
Partager