Bonjour,
Je developpe une application client/serveur. L'application cliente affiche une JTable
avec deux colonnes
je recoit un vecteur de vecteurs depuis le serveur qui me permet de mettre à jour la JTable chez les clients
voici l'erreur que j'obtiens aléatoirement :
voici le panel qui contient cette JTable
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 Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 at java.util.Vector.elementAt(Vector.java:427) at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277) at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderRenderer(BasicTableHeaderUI.java:648) at javax.swing.plaf.basic.BasicTableHeaderUI.getHeaderHeight(BasicTableHeaderUI.java:692) at javax.swing.plaf.basic.BasicTableHeaderUI.createHeaderSize(BasicTableHeaderUI.java:721) at javax.swing.plaf.basic.BasicTableHeaderUI.getPreferredSize(BasicTableHeaderUI.java:752) at javax.swing.JComponent.getPreferredSize(JComponent.java:1627) at javax.swing.ViewportLayout.preferredLayoutSize(ViewportLayout.java:78) at java.awt.Container.preferredSize(Container.java:1616) at java.awt.Container.getPreferredSize(Container.java:1601) at javax.swing.JComponent.getPreferredSize(JComponent.java:1629) at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:702) at java.awt.Container.layout(Container.java:1432) at java.awt.Container.doLayout(Container.java:1421) at java.awt.Container.validateTree(Container.java:1519) at java.awt.Container.validate(Container.java:1491) at javax.swing.RepaintManager.validateInvalidComponents(RepaintManager.java:639) at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:127) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
la methode "MajTab" est appelée par une autre classe (une classe qui recoit le vector de vectors du serveur)
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 package IHM; import java.util.Vector; import Chat.*; import javax.swing.*; import javax.swing.table.TableColumn; public class PanListeAttente extends JPanel { private JTable jtListeAttente = new JTable(); private JScrollPane jsp = new JScrollPane(); private Vector listeTitres = new Vector(); private Vector listeDemandeurs = new Vector(); private TableModelAttente model; public PanListeAttente() { super(); //--on initialise la JTable listeTitres.addElement("pseudo"); listeTitres.addElement("motif"); MajTab(jtListeAttente,listeDemandeurs); //--Reglage de la liste d'attente jtListeAttente.setAlignmentX(0.4F); jsp.setViewportView(jtListeAttente); //--Mise en place des elements du panel this.setBorder(BorderFactory.createTitledBorder("Liste d'attente")); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jsp, GroupLayout.DEFAULT_SIZE, 223, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(jsp, GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE) .addContainerGap()) ); } //--Methode qui permet de mettre à jour la JTable de liste d'attente private void MajTab(JTable table,Vector donnees) { model = new TableModelAttente(listeTitres, donnees); table.setModel(model); table.validate(); } //--Getters et Setters public void setListe(Vector liste) { MajTab(jtListeAttente,liste); } public JTable getJTable() { return jtListeAttente; } }
le contenu de la jtable est juste ! le vecteur de vecteurs n'a pas d'erreurs
et voici le modele de ma jtable :
je n'arrive pas a savoir d'ou provient cette erreur !
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 package IHM; import javax.swing.table.*; import java.util.*; public class TableModelAttente extends AbstractTableModel{ private Vector header=new Vector(); private Vector donnees=new Vector(); private Class[] types = new Class [] { String.class, String.class }; private boolean[] canEdit = new boolean [] { false, false }; public TableModelAttente(){ super(); } public TableModelAttente(Vector header,Vector donnees){ super(); this.header=header; Maj(donnees); } public TableModelAttente(Vector donnees){ Maj(donnees); } public void Maj(Vector donnees){ this.donnees.clear(); this.donnees=donnees; fireTableDataChanged(); } public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public int getRowCount() { return donnees.size(); } public int getColumnCount() { return header.size(); } public boolean isCellEditable(int row, int col) { return canEdit [col]; } public String getColumnName(int col){ return (String) header.get(col).toString(); } public Object getValueAt(int row, int col) { return (String)((Vector)(donnees.get(row))).get(col); } //Permet de tout éffacer /*public void clear () { for (int i = 0;i < header.size();i++) donnees.clear(); fireTableDataChanged(); }*/ }
meme si ça ne fais aucunement planter l'application... je prefererais ne plus avoir ce message
ça serait vraiment sympa si quelqu'un pouvait m'aider a résoudre le bug..
merci ++![]()
Partager