tutorials.de Buch-Aktion 02/2012
Like Tree2Danke
  • 1 Beitrag von miffi
  • 1 Beitrag von Tsunamii
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
750
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Hi Leute,
    habe das Problem, dass ich ein nicht zu identifizierende Thread Exception bekomme die immer dann auftaucht wenn ich Datensätze in die Tabelle über das TableModel hinzufüge wenn zugleich eine Spalte durch den AutoRowSorter als zu sortieren gesetzt ist. Hier mal die Fehlermeldung, weiter unten der Code fürs hinzufügen, auslesen und speichern in die DB:
    Code :
    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
    
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
        at javax.swing.DefaultRowSorter.convertRowIndexToModel(Unknown Source)
        at javax.swing.JTable.convertRowIndexToModel(Unknown Source)
        at javax.swing.JTable.getValueAt(Unknown Source)
        at javax.swing.JTable.prepareRenderer(Unknown Source)
        at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
        at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
        at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
        at javax.swing.plaf.ComponentUI.update(Unknown Source)
        at javax.swing.JComponent.paintComponent(Unknown Source)
        at javax.swing.JComponent.paint(Unknown Source)
        at javax.swing.JComponent.paintToOffscreen(Unknown Source)
        at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
        at javax.swing.RepaintManager.paint(Unknown Source)
        at javax.swing.JComponent._paintImmediately(Unknown Source)
        at javax.swing.JComponent.paintImmediately(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
        at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
        at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

    Die Savemethode und die Methode zum auslesen werden beide hintereinander in einem Thread ausgeführt.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
        public void setModelObjects(Vector<Object> modelObjects)
                throws SecurityException, IllegalArgumentException, SQLException,
                InstantiationException, IllegalAccessException,
                NoSuchMethodException, InvocationTargetException, IOException,
                ParseException {
            if (modelObjects != null && !modelObjects.isEmpty()) {
                Vector<Vector<Object>> spaltenMeta = getSpaltenMetaData();
                addRow(modelObjects.size(), false);
                for (int i = 0; i < modelObjects.size(); i++) {
                    Object obj = modelObjects.get(i);
                    for (Vector<Object> meta : spaltenMeta) {
                        if (meta.get(1) != null) {
                            Object value = obj.getClass()
                                    .getMethod("get" + meta.get(1)).invoke(obj);
                            if (value != null) {
                                int column = findColumn(meta.get(0).toString());
                                setValueAt(value, i, column);
                            }
                        }
                    }
                }
            }
        }

    Gruß Jan
     

  2. #2
    Avatar von miffi
    miffi miffi ist offline Mitglied Gold
    Registriert seit
    Jul 2009
    Ort
    Ravensburg (BW)
    Beiträge
    139
    Hallo Jan,

    wenn du deinen StackTrace mal genauer anschaust, siehst du, dass der Fehler nicht im Code zum Setzen von Tabellenwerten liegt, sondern im RowSorter:
    Code java:
    1
    2
    
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
         at javax.swing.DefaultRowSorter.convertRowIndexToModel(Unknown Source)
    Es ist keineswegs ein "undefinierbarer" Fehler, sondern du überschreitest die Grenzen des Arrays bzw. der Collection in der angezeigten Funktion convertRowIndexToModel(). Vielleicht hast du einen Fehler beim Inkrementieren oder einen falschen Parameter übergeben.

    Gruß
    miffi
    ElJarno bedankt sich. 
    "A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
    Douglas Adams

  3. #3
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Ne hat ja alles wunderbar funktioniert, beim debuggen wurden ja alle Werte korrekt in das TableModel geschrieben. Aber das war ja mal wieder relativ einfach hier die Lösung:
    Code :
    1
    
    fireTableRowsInserted(0, modelObjects.size() - 1);

    Gruß Jan
     

  4. #4
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    mein Vorschlag ausm anderen Forum auch hier:

    wie setzt du deinen Rowsorter?

    wenn du ihn so setzt,
    Code :
    1
    
    sorter = new TableRowSorter<TableModel>();
    dann änder ihn mal folgendermaßen ab:
    Code :
    1
    
    sorter = new TableRowSorter<ThisTableModel>(model);

    dadurch werden fast alle NullPointer beim Einfügen von Datensätzen behoben und der fix mit dem -1 wird dadurch nicht mehr benötigt
    ElJarno bedankt sich. 

  5. #5
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Jo Danke, schon gesehen und erledigt
     

  6. #6
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Dat kann echt nich wahr sein, dieser blöde RowSorter macht mich noch fertig

    Code :
    1
    2
    3
    4
    5
    6
    
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.DefaultRowSorter.convertRowIndexToModel(Unknown Source)
        at javax.swing.JTable.convertRowIndexToModel(Unknown Source)
        at javax.swing.JTable.getValueAt(Unknown Source)
        at javax.swing.JTable.prepareRenderer(Unknown Source)
        at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)

    Irgend ne ahnung was man jetzt noch machen kann?

    Gruß Jan
     

  7. #7
    ElJarno ElJarno ist offline Mitglied Silber
    Registriert seit
    May 2010
    Beiträge
    88
    Schon erledigt
     

Ähnliche Themen

  1. JTable dynamisch befüllen
    Von Myar im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 14.12.07, 15:22
  2. eine JTable befüllen
    Von Mayday171 im Forum Java
    Antworten: 1
    Letzter Beitrag: 30.05.07, 16:12
  3. JTable mit Properties befüllen
    Von Unique86 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 20.02.07, 08:57
  4. Sortierung einer JTable nach numerischen Spalten
    Von Greq im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 10.11.06, 12:00
  5. Update Ansicht einer JTable nach Änderungen
    Von AlexD1979 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 21.07.03, 00:55