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

Langage Java Discussion :

Erreur : java.lang.ArrayIndexOutOfBoundsException


Sujet :

Langage Java

  1. #1
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut Erreur : java.lang.ArrayIndexOutOfBoundsException
    Bonjour les amis,
    Je reviens encore vers vous pour une aide:
    Voila, j'ai mis cette action en place afin de récupérer la valeur de la cellule sélectionnée dans ma JTable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    Table.getSelectedRow();
    Table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    Table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    		public void valueChanged(ListSelectionEvent e) {
    		// TODO Auto-generated method stub
    		int ligne = Table.getSelectedRow();
    		int col = Table.getSelectedColumn();
    		Object cel = Table.getValueAt(ligne, col);
    ...
    Mais à chaque fois que j’essaie d'actualiser La table, j'ai cette erreur :
    xception occurred during event dispatching:
    java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.get(ArrayList.java:324)
    at ci.tableModelService.ArticleFourTableModel.getValueAt(ArticleFourTableModel.java:54)
    at javax.swing.JTable.getValueAt(JTable.java:2695)
    at ci.interGraph.AddReception$5.valueChanged(AddReception.java:507)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    Pouvez-vous m'aider comment régler ce problème ?
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Je ne vois pas vraiment ton problème a résoudre ceci.
    L'erreur signifie comme elle l'indique que soit ligne soit col est à -1. Ce qui signifie que tu n'a sans doute pas initilisé ta Table.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par deathness Voir le message
    L'erreur signifie comme elle l'indique que soit ligne soit col est à -1. Ce qui signifie que tu n'a sans doute pas initilisé ta Table.
    Plus probablement, cela veut dire qu'aucune cellule n'est sélectionnée.
    Ce qui peut arriver si on sélectionne quelque chose dans la table et qu'on le désélectionne ensuite.
    Comme le dit la javadoc de JTable.getSelectedColumn() et getSelectedRow(), soit dit en passant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut
    En effet c'est lorsque je sélectionne un fournisseur dans la combobox et que la TableModel doit être vidée et remplie par les données en fonction de la selection que j'ai ce problème.
    Vous avez pleinement raison il peut-être que j'initialise la tablemodel avant.
    Est-ce avec la méthode repaint ? Car je l'ai essayé mais je n'ai pas eu gain de cause

    Pourrez-vous s'il vous plaît me montrer comment initialiser la Jtable.
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

  5. #5
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut
    J'ai éssaiyé de faire ceci afin de reinitialiser ma Jtable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(Table.isRowSelected(-1) && (Table.isColumnSelected(-1))){
    	Table.revalidate();}
    Mais toujours cette erreur :
    java.lang.ArrayIndexOutOfBoundsException: -1
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est normal : -1 n'est pas un paramètre valide de isRowSelected() ou isColumnSelected(). Ça commence à zéro.

    Je comprends pas pourquoi tous ces chichis. L'erreur précédente arrive très probablement parce que Table.getSelectedRow() renvoie -1, ce qui n'est pas un index valide, et signifie que rien n'est sélectionné.

    Il suffit de ne pas chercher à faire quelque chose avec la sélection quand il n'y a pas de sélection.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut
    Heu, en fait, je voulais tout simplement lui demander d'actualiser la table en la réinitialisant. C'est à dire dès que je clique sur un autre composnant qu'il remet tout à zéro.
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je ne sais pas trop ce que c'est que ces histoires de réinitialiser ou de revalider (j'ai fait que des trucs très basiques avec les JTables.)

    Mais je suis sûr d'une chose : -1 n'est pas un paramètre valide à Table.isRowSelected(), ni à Table.isColumnSelected(), ni à Table.getValueAt().

    Ne le fais pas, et pouf, exception partie.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut
    Voila : En fait il fallait remplacer ListSelectionListener de ma JTable par un MouseAdapter qui correspond mieux au besoin
    et cela a supprimé l'erreur de
    ArrayIndexOutOfBoundsException
    car lorsque je choisi un nouveau fournisseur et que je change le table model le ListSelectionListener capture un évènement or il n'y aura pas de ligne sélectionné dout le
    arrayindexoutof...
    car il va cherché la valeur de la ligne -1. Dans mon cas de la sélection d'un nouveau fournisseur le mouseAdapter ne capturera pas d’évènement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Table.addMouseListener(new MouseAdapter() {
    			public void mouseClicked(MouseEvent e){
    				int row = Table.rowAtPoint(e.getPoint());
    				int col = Table.columnAtPoint(e.getPoint());
    				if((row >= 0 && row < Table.getRowCount()) && (col >= 0
    						&& col < Table.getColumnCount())){
    					txtDesignation.setText((String) Table.getValueAt(row, col));
    					ArticleRecu.getTxtDesignation().setText((String) Table.getValueAt(row, col));
    et dans mon TableModel j'ai fais ceci :
    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
    public Object getValueAt(int rowIndex, int columnIndex) {
            // on verifie que la ligne est bien prise en charge
            if(rowIndex >= 0 && rowIndex<this.getRowCount()){
                // un switch serai de rigeur dans ce cas 
                if (columnIndex
     == 0){
                    return list.get(rowIndex).getNARTEF();
                }else if (columnIndex == 1){
                    return list.get(rowIndex).getLARFEF();
                }else if(columnIndex == 2){
                    return list.get(rowIndex).getPXACTF();
                }else{
                    return "column unsuported";
                }
            }else{
                // un chaine vide pour ne pas faire d'erreur
                return "";
            }
        }
    A présent ça fonctionne nickel
    Merci à vous les amis et mention toute particulière à Rolfone
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ravi que tu aies trouvé une solution .

    Mais...

    Citation Envoyé par the watcher Voir le message
    Voila : En fait il fallait remplacer ListSelectionListener de ma JTable par un MouseAdapter qui correspond mieux au besoin
    et cela a supprimé l'erreur de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayIndexOutOfBoundsException
    car lorsque je choisi un nouveau fournisseur et que je change le table model le ListSelectionListener capture un évènement or il n'y aura pas de ligne sélectionné dout le

    car il va cherché la valeur de la ligne -1.
    Donc en fait c'est l'histoire de la blonde qui marche dans la rue, et qui voit devant elle une peau de banane :

    "- Oh, non, je vais encore tomber !"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre régulier Avatar de the watcher
    Inscrit en
    Juillet 2003
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 356
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ravi que tu aies trouvé une solution .
    Donc en fait c'est l'histoire de la blonde qui marche dans la rue, et qui voit devant elle une peau de banane :
    "- Oh, non, je vais encore tomber !"
    T'en fait pas thelvin, je ne ferai pas comme la blonde la prochaîne fois
    L'important n'est pas de tout savoir mais de savoir où tout se trouve !

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

Discussions similaires

  1. Erreur "java.lang.ArrayIndexOutOfBoundsException: 0"
    Par Mourad19 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 11/10/2014, 02h36
  2. Réponses: 1
    Dernier message: 10/08/2013, 18h45
  3. Réponses: 4
    Dernier message: 18/04/2013, 10h41
  4. Réponses: 1
    Dernier message: 07/09/2012, 17h14
  5. Erreur java lang.ArrayIndexOutOfBoundsException
    Par lerorodu51 dans le forum NetBeans
    Réponses: 8
    Dernier message: 04/06/2009, 19h17

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