Προς το περιεχόμενο

AbstractTableModel (java.lang.ArrayIndexOutOfBoundsException)


kapamarous

Προτεινόμενες αναρτήσεις

Δημοσ.

καλημερα σας .

 

Έχω μια class (MySqlTableModel) που κανει extends την AbstractTableModel.

 

Class MysqlTableModel

 

>import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

/**
*
* @author root
*/
public class MySqlTableModel extends AbstractTableModel {

   Connection connection;
   Vector rows , data;
   Vector columns=null;
   String username_desc = null;
   String query =
           "SELECT p.product_id,p.code,p.model,ca.description,"
           + "p.price,p.description,co.description "
           + "FROM companies co,categories ca,products p WHERE p.category_id=ca.categories_id "
           + "AND p.company_id = co.companies_id";

   public MySqlTableModel(Connection conne, String username_description) {

       connection = conne;
       username_desc = username_description;
       initVectors();
   }

   public void initVectors() {
       if (username_desc == "admin_user") {
           try {
               Statement state = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
               ResultSet rs = state.executeQuery(query);
               ResultSetMetaData rsMeta = rs.getMetaData();
               int metaSize = rsMeta.getColumnCount();
               columns = new Vector(metaSize);
               System.out.println("The lenght of the columns are :" + metaSize);
               for (int i = 1; i <= metaSize; i++) {
                   columns.add(rsMeta.getColumnName(i));
               }
              
               data = new Vector();
        


               //boolean next =
               while (rs.next()) {
                   rows = new Vector(metaSize);
                   for (int i = 1; i <= metaSize; i++) {

                       rows.add(rs.getObject(i));
                   }
                   data.addElement(rows);
               }
               rs.close();
               state.close();

           } catch (Exception ex) {
               ex.printStackTrace();
           }
       } else {
           javax.swing.JOptionPane.showMessageDialog(null, "User is simple  user");
       }
   }

   public int getRowCount() {
       return rows.size();
   }

   public int getColumnCount() {
       return columns.size();
   }

   public Object getValueAt(int rowIndex, int columnIndex) {
      
       Vector v = (Vector)data.get(rowIndex);
       return v.elementAt(columnIndex);
      //return null;
   }

   public String getColumnName(int column) {
       return (String) columns.get(column);
   }

   public boolean isCellEditable(int rowIndex, int columnIndex) {
       return false;
   }

   public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
       rows.set(rowIndex, aValue);
       fireTableCellUpdated(rowIndex, columnIndex);

   }

   public Class getColumnClass(int c) {
       return getValueAt(0, c).getClass();
   }
}

 

Ο compiler δειχνει οτι εχει προβλημα η void getValueAt(int rowIndex, int columnIndex) και συγγκεκριμενα η γραμμη με τα bold με το exception java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2.στην βαση αυτην την στιγμη υπαρχουνε 2 εγγραφες.

> public Object getValueAt(int rowIndex, int columnIndex) {
      
       [b]Vector v = (Vector)data.get(rowIndex);[/b]
       return v.elementAt(columnIndex);
      //return null;
   }

 

Καθε βοηθεια θα ητανε πολυτιμη .Ευχαριστω εκ των προτερων .

Δημοσ.

Καλημερα.

Στο λεει το exception, ζητας κατι το οποιο δεν υπαρχει. Βαλε breakpoint στην while (εκει που γεμιζει ο vector) να δεις τι παιζει. Αλλιος περιμενε καναν που ξερει απο java να απαντηση.

Δημοσ.

Δεν μπορω να το δοκιμάσω τωρα για να σου πώ σιγουρα τι παιζει αλλά αυτό το exception σημαινει οτι πας να παρεις μια τιμή απο το Vector που δεν υπάρχει(οπως ειπε και ο Evgenios1).

Στον κώδικα που χρησιμοποιείς την κλάση αυτή(και δεν εχεις ποστάρει), λογικα θα ζητας απο το vector πχ την τιμή 10 ενώ εχει απο 0 μεχρι 9, ή κατι αντίστοιχο.

Δημοσ.

>
public Object getValueAt(int rowIndex, int columnIndex) {
      
       Vector v = (Vector)data.get(rowIndex);
System.out.println("data size="+data.size()+"vector size="+v.size()+",row index="+rowIndex+",column index="+columnIndex);
       return v.elementAt(columnIndex);
      //return null;
   }

 

άλλαξε τον κώδικα σου με το παραπάνω και δες που είναι το λάθος.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...