IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

mise à jour d'une JTable => erreur aléatoire


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Par défaut mise à jour d'une JTable => erreur aléatoire
    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 :

    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)
    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
    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;
    	}
    }
    la methode "MajTab" est appelée par une autre classe (une classe qui recoit le vector de vectors du serveur)
    le contenu de la jtable est juste ! le vecteur de vecteurs n'a pas d'erreurs

    et voici le modele de ma 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
    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();
    	}*/
     
    }
    je n'arrive pas a savoir d'ou provient cette erreur !
    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 ++

  2. #2
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Par défaut
    A premiere vue d'apres l'exception tu essaies de recupérer un élément dans un vecteur qui n'en contient pas.

    En regardant ton code je me pose une petite question.

    Pourquoi fais tu un nouveau table model a chaque fois que tu met la table a jour?

    Ne serait il pas plus adéquat de juste modifier ton vecteur de données dans ton table model ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Par défaut
    merci beaucoup ! je n'ai plus cette erreur
    c'etait bien le fait d'instancier pleins de fois le model :/
    je ferais un test avec pleins²² de clients la semaine prochaine

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour d'une JTable
    Par Chavadam dans le forum Composants
    Réponses: 6
    Dernier message: 22/08/2013, 19h03
  2. Mise à jour d'une JTable
    Par kimlaw95 dans le forum Composants
    Réponses: 6
    Dernier message: 03/04/2009, 16h25
  3. Mise à jour d'une JTable (Problème d'affichage)
    Par ouchemhou dans le forum Composants
    Réponses: 29
    Dernier message: 14/08/2008, 14h33
  4. Mise à jour d'une JTable en fonction d'une JList
    Par xtaZy dans le forum Composants
    Réponses: 1
    Dernier message: 21/03/2007, 19h25
  5. mise à jour d'une JTable ?
    Par Sakalam dans le forum Composants
    Réponses: 11
    Dernier message: 15/09/2006, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo