ich habe einen JTable in meiner Anwendung, der ein Datenmodell als Ergebnis aus einer Filteroperation übergeben bekommt und dieses dann per fireTableStructureChanged() anzeigen soll. Das funktioniert auch sehr gut, allerdings gibt es eine Exception, wenn das Datenmodell leer ist (was beim Filtern durchaus vorkommen kann, wenn eben kein Dateneintrag die Filterbedingung erfüllt). Genau genommen wird dann getColumnClass() meines TableModels aufgerufen, was auf ein getValueAt(0, spaltenNr) zurückführt und da natürlich ins Leere greift.
Weiß jemand, wie ich das verhindern kann?
Genau genommen wird dann getColumnClass() meines TableModels aufgerufen, was auf ein getValueAt(0, spaltenNr) zurückführt und da natürlich ins Leere greift.
und fireTabeStructureChanged() wirft anscheinend folgendes:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
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.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(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)
Ja das ist klar, aber kann man die nicht irgendwoher bekommen? Ich habe beim googlen nämlich schon Exceptions gesehen, wo anstatt unknown source JTable.java oder ähnliches stand, was sehr danach klingt, dass derjenige das source file hatte (und das war keine Eigenimplementierung)
lad dir doch den Quellcode der Java SE API runter, gibts irgendwo auf der Homepage von Sun
oder du benutzt (z.b. in Eclipse) ein JRE zum ausführen in dem die Quellcodes bereits eingebunden sind, dann kannst du mit einen richtigen Debugger reingehen.
ich habe einen JTable in meiner Anwendung, der ein Datenmodell als Ergebnis aus einer Filteroperation übergeben bekommt und dieses dann per fireTableStructureChanged() anzeigen soll.
Weiß jemand, wie ich das verhindern kann?
WIe wäre es denn, wenn DU das Ergebnis Deiner Anfrage überprüftest? Erhälst Du ein Ergebnis != null, bist Du fündig, und steigst in Dein tablemodel ein; ansonsten zeigst Du dem Anwender eine Meldung, daß nichts da ist, und überspringst die TabelRoutine,
WIe wäre es denn, wenn DU das Ergebnis Deiner Anfrage überprüftest? Erhälst Du ein Ergebnis != null, bist Du fündig, und steigst in Dein tablemodel ein; ansonsten zeigst Du dem Anwender eine Meldung, daß nichts da ist, und überspringst die TabelRoutine,
Das wäre natürlich eine Möglichkeit, wobei ich es intuitiver finden würde, dass man eben einfach einen leeren Table angezeigt bekommt, wenn man alles rausfiltert.
@Schandro: Woher weiß ich denn, in welchen JREs die Source Codes eingebunden sind? Z.z. benutze ich Version 1.6.0_16
Dann zeig eben nen leeren Tabel an, statt des Hinweises, oder aber, DU gibst den Hinweis ( damit der User weiß, daß das Ergebnis tatsächlich leer ist: evtl sogar noch mal die Abfrage anzeigen?) , und zeigst dann Deinen leeren Table an.
boah ich bin so blöd. Ich hab natürlich anstatt Integer.class int.class eingetragen...
Solche Flüchtigkeitsfehler kosten immer am meisten Zeit. Ich kann mich noch gut an ein Praktikum aus dem letzten Semester erinnern, was innerhalb einer Woche abgegeben werden sollte. Ich habe da 99% des Codes in 5h fertiggestellt und unsere Gruppe hat die restlichen Tage damit verbracht, nach einem Fehler zu suchen, den wir dann ungelogen 30 mins vorm Testat morgens gefunden haben: Es war eine schließende Klammer falsch gesetzt -.-
Und ja, im Prinzip gebe ich Hinweis + Ergebnis aus, denn in einem Label wird immer angezeigt, wieviele Einträge gelöscht/gefiltert wurden.
Aber am Vorschlag von Schandro bin ich nach wie vor auch noch interessiert