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

AWT/Swing Java Discussion :

Erreur de java.lang.ArrayIndexOutOfBoundsException


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut Erreur de java.lang.ArrayIndexOutOfBoundsException
    Bonjour

    Jai créé une application qui récupére des données provenant de ma base de données et les affiche dans une JTable. J'essaie maintenant d'ajouter un Checkbox dans la 1ère colonne de mon tableau, mais je reçois ce message d'erreur:

    le nombre de colonne est: 4
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at gesstock.PanListerUser.actualiser(PanListerUser.java:117)
    at gesstock.PanListerUser.<init>(PanListerUser.java:61)
    at gesstock.Accueil.<init>(Accueil.java:27)
    at gesstock.Main.main(Main.java:17)
    Java Result: 1
    Apparemment j'essaie de lire une case qui n'a pas été définie dans mon tableau

    Voici mon code:

    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
    String requete = null;
                   requete="select * from user ";
                             //Création d'un objet Statement
                               long start = System.currentTimeMillis();
                               state = con.createStatement();
                             //L'objet ResultSet contient le résultat de la requête SQL
                               res = state.executeQuery(requete);
                             //On récupère les MetaData
                               resultMeta = res.getMetaData();
     
                               //On récupère les meta afin de récupérer le nom des colonnes
                                ResultSetMetaData meta = res.getMetaData();
                                int nbrCol = meta.getColumnCount();
                                System.out.println("le nombre de colonne est: "+nbrCol);
                                //On initialise un tableau d'Object pour les en-têtes du tableau
                                Object[] column = new Object[nbrCol+1];
     
                                column[0] = "Case à cocher";
                                for(int i = 1 ; i <= nbrCol; i++)
                                column[i] = meta.getColumnName(i);
     
                                //Petite manipulation pour obtenir le nombre de lignes
                                res.last();
                                int rowCount = res.getRow();
                                Object[][] data = new Object[res.getRow()][nbrCol+1];
                                //On revient au départ
                                res.beforeFirst();
                                int j = 1;
                                //On remplit le tableau d'Object[][]
                                while(res.next()){
     
                                data[0][0] = new Boolean(false);    
     
                                for(int i = 1 ; i <= nbrCol; i++)
                                data[j][i] = res.getObject(i);
                                j++;
                                }
    La ligne 117 correspond à celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     data[j][i] = res.getObject(i);
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le problème n'est pas au niveau du nombre de colonnes, mais du nombre de lignes. Tu dimensionnes ton tableau data en lignes par la méthode ResultSet.getRow(), qui est le numéro de la dernière ligne, donc bien le nombre de lignes qu'il faut dans le tableau. Mais tu initialises j à 1. Donc première ligne du tableau jamais affectée, donc remplie de null, et ensuite, à la dernière ligne du resultset, tu es hors tableau (j vaut data.length).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Oui j'initialise j à 1 mais avant ça j'ai déjà affecté la première ligne du tableau en faisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data[0][0] = new Boolean(false);
    Et deuxièmement est ce normal que res.getRow() me renvoie zéro comme résultat? Pourtant j'ai 2 enregistrements dans ma table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     int nbrLign = res.getRow();
                                System.out.println("le nombre de ligne est: "+nbrLign);
    //Le résultat me donne 0

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par momjunior Voir le message
    Oui j'initialise j à 1 mais avant ça j'ai déjà affecté la première ligne du tableau en faisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data[0][0] = new Boolean(false);
    Et alors, ça change quoi au sujet de tenter d'écrire dans le tableau après la dernière ligne ? Et ce que tu fais, c'est simplement configurer la valeur de ta checkbox (la première colonne). Et les deux autres colonnes, elles sont pas censées contenir les valeur du premier enregistrement ? Quoiqu'il en soit dans un tableau de n lignes, on ne peut mettre que n lignes, d'index allant de 0 à n-1.

    Citation Envoyé par momjunior Voir le message
    Et deuxièmement est ce normal que res.getRow() me renvoie zéro comme résultat? Pourtant j'ai 2 enregistrements dans ma table
    Peut-être. Tu as déclaré un curseur pour le statement ?

    Au lieu d'utiliser un curseur, tu peux aussi créer un Vector (qui lui peut changer de taille), ou une liste à transforer en tableau à la fin.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Par défaut
    Ok ça marche. Comme tu l'as dit il fallait faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while(res.next()){
                                    data[j-1][0] = new Boolean(false);
     
                                    for(int i = 1 ; i <= meta.getColumnCount(); i++)
                                    {
                                    data[j-1][i] = res.getObject(i);
                                    }
                                    j++;                            
                                }
    Merci

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Ç'eut été tellement plus logique d'initialiser j à 0 (j=0), plutôt que de faire des j-1 partout...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. erreur tomcat : java.lang.ArrayIndexOutOfBoundsException
    Par marwa zd dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 11/04/2014, 00h49
  2. Réponses: 4
    Dernier message: 18/04/2013, 10h41
  3. Réponses: 1
    Dernier message: 07/09/2012, 17h14
  4. Erreur : java.lang.ArrayIndexOutOfBoundsException
    Par the watcher dans le forum Langage
    Réponses: 10
    Dernier message: 22/09/2010, 18h56
  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