Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631

    prblema con l'ArrayIndexOutOfBoundsException

    ciao ragazzi
    io utilizzo un Jtable in cui faccio stampare dal database dei dati,
    poi implemento questo JTable ulilizzando L'AbstractTableModel ce mi permette di rendere la tabella più "bella"...
    però ho un problema con un metodo della classe che utilizzza l'AbstractTableModel,
    cioè cè il metodo

    codice:
     public Object getValueAt(int row, int col) 
       {try {
        }
        catch(ArrayIndexOutOfBoundsException e){}
           if (flag == false) {
            return data[row][col];
           }
      else {return data_script[row][col];} 
       }

    che mi crea un problema di

    codice:
    ArrayIndexOutOfBoundsException

    cioè mi dà questo errore

    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5
            at MyTableModel.getValueAt(MyTableModel.java:81)
    67
            at javax.swing.JTable.getValueAt(JTable.java:1852)
    cioè mi stampa a video solo le prime 5 tuple, dopo di chè l'errore
    ..sapreste dirmi cosa è successo???
    :master: :master: :master:
    quando il diavolo ti accarezza è perchè vuole la tua anima

  2. #2
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    poi ho anche scoperto che se al RETURN DATA_SCRIPT[ROW][COL], AL POSTO DI ROW ASSOCIO IL VALORE 0, mi stampa x il totale delle tuple sempre e solo la prima tupla del database...cioè così:

    codice:
     public Object getValueAt(int row, int col) 
       {
           try {
            
           }
        catch(ArrayIndexOutOfBoundsException e){}
           if (flag == false) {
            return data[row][col];
           }
      else {
           
            return data_script[0][col];
           
      }
       }
    quando il diavolo ti accarezza è perchè vuole la tua anima

  3. #3
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    se ti stampa 4 o 5 tuple e poi ti da' errore, ci sara' un ciclo che le fara' stampare... prova a postarlo

    poi ho anche scoperto che se al RETURN DATA_SCRIPT[ROW][COL], AL POSTO DI ROW ASSOCIO IL VALORE 0, mi stampa x il totale delle tuple sempre e solo la prima tupla del database...cioè così:
    be' giusto no? ti stampa sempre la prima riga ripetuta per la durata del ciclo... e' quello che gli hai detto di fare fissando row = 0

  4. #4
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    NOOOO
    però se a row gli associo 6, per esempio, non mi stampa più nulla a video, cioè nel senso che il programma si blicca :master: :master: :master: :master:
    quando il diavolo ti accarezza è perchè vuole la tua anima

  5. #5
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    e quante tuple ci sono in totale? come sono state definite?

  6. #6
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    in pratica il mio programma estrapola dalle pagine web il numero di script presenti, però cè una differenza, prima di avviare il programma metto tutte le pagini web, in una cartella e il programma
    ci lavora sopra...calcola tutte le informazioni delle pagini e li "mette" in un database...dopodichè da questo database li carico in un JTable a video, con in mezzo utlizzando l'AbstractTableModel, per rendere la tabella più "carina"


    questa è la classe che mi permette di visualizzare bene la tabella
    codice:
    class MyTableModel extends AbstractTableModel 
    {  public MouseEvent e;
       public Object[][] data =new Object[99][6];//data rappresenta la tabella delle pagini
       public Object[][] data_script =new Object[0][8];//data_script rappresenta la tabella degli script
       public JTable tt= new JTable();
       private boolean DEBUG = false;
       private String[] columnNames ={"nome pagina", "indirizzo", "path", "dimensione","numero file", "codice", "data estrazione"};
       private String[] columnNamesScript ={"seleziona","nome", "tipo", "scopo", "data estrazione","provenienza", "client/server", "frequenza utilizzo", "codice"};
       private MouseListener mouseListener;
       private TableModelListener tableModelListener; 
       private boolean flag = false; 
       public int c=0;  
        
       public void MyTable_script(Object[][] data_script) {
           flag = true;
           this.data_script= data_script;  }   
        public void MyTable(Object[][] data) {
          this.data= data;} 
             
       public int getColumnCount() {if (flag == false) {return columnNames.length;}
                                                  else {return   columnNamesScript.length;
                                                  } }
       public int getRowCount() {return data.length;}
       public String getColumnName(int col) {if (flag == false) {return columnNames[col];}
                                            else {
                                            return columnNamesScript[col];
                                            } }
       public Object getValueAt(int row, int col) 
       {
           try {
            
           }
        catch(ArrayIndexOutOfBoundsException e){}
           if (flag == false) {
            return data[row][col];
           }
      else {
           
            return data_script[row][col];
           
      }
       }
       
       
      //QUESTA CLASSE MI PERMETTE DI VISUALIZZARE IL FLAG IN TABELLA 
       public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
       
       public boolean isCellEditable(int row, int col) {
           if (col < 0) {
                return false;
            } else {
                return true;
            }
        }     
     /*   public void setValueAt(Object value, int row, int col) {
                if (DEBUG) {
                    System.out.println("Setting value at " + row + "," + col
                                       + " to " + value
                                       + " (an instance of "
                                       + value.getClass() + ")");
                }
    
                data[row][col] = value;
                fireTableCellUpdated(row, col);
    
                if (DEBUG) {
                    System.out.println("New value of data:");
                    printDebugData();
                }
            }*/
     /*   private void printDebugData() {
                int numRows = getRowCount();
                int numCols = getColumnCount();
    
                for (int i=0; i < numRows; i++) {
                    System.out.print("    row " + i + ":");
                    for (int j=0; j < numCols; j++) {
                        System.out.print("  " + data[i][j]);
                    }
                    System.out.println();
                }
                System.out.println("--------------------------");
            } */
        public void setUpSportColumn(JTable table,TableColumn colonna) {
            // colonna.setCellEditor(new DefaultCellEditor(comboBox));
            //settaggio caratteristiche della cella (renderer)        
            DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
            renderer.setToolTipText("Clicca per vedere il codice");
            renderer.setForeground(java.awt.Color.RED);  
            colonna.setCellRenderer(renderer);
           } 
         
    
    }

    il rigo rosso dove cè il problema, ho visto ma nn cè nessun ciclo
    quando il diavolo ti accarezza è perchè vuole la tua anima

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: prblema con l'ArrayIndexOutOfBoundsException

    Originariamente inviato da gax80
    codice:
     public Object getValueAt(int row, int col) 
       {try {
        }
        catch(ArrayIndexOutOfBoundsException e){}
           if (flag == false) {
            return data[row][col];
           }
      else {return data_script[row][col];} 
       }
    L'accesso a data / data_script va fatto dentro il try, altrimenti non serve a nulla il try/catch!
    Poi cosa fare se ti becchi un ArrayIndexOutOfBoundsException, dipende da te. In teoria (se la gestione è fatta correttamente) non dovrebbe accadere.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    ti ringrazio, ho trovato l'errore, infatti cèra un ciclo di 5 elementi, cioè nn veniva aggiornata una variabile, comunque ti ringrazio molto per la tua disponibilità


    quando il diavolo ti accarezza è perchè vuole la tua anima

  9. #9
    Utente di HTML.it L'avatar di gax80
    Registrato dal
    May 2006
    Messaggi
    631
    cmq potrei usare

    codice:
    throws ArrayIndexOutOfBoundsException
    no?
    quando il diavolo ti accarezza è perchè vuole la tua anima

  10. #10
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    come dice saggiamente andbin, dovresti puntare a strutturare il codice in modo da non sollevare mai l'eccezione ArrayIndexOutOfBounds piuttosto che a pensare a soluzioni per gestirla

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.