Fehler in Programmtabelle

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.

BBCode ist eingeschaltet
[img] ist eingeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Ansicht erweitern Die letzten Beiträge des Themas: Fehler in Programmtabelle

von Til » 31 Okt 2004, 20:47

Momentan wird eine Exception geworfen, wenn das Model außerhalb vom Swing event thread verwendet wird. Filter wechseln habe ich probiert. Das schein schon im richtigen Thread gemacht zu werden. Du kannst da gerne ein invokeLater reinpacken, schaden kann es nicht, aber nötig ist es momentan auch nicht...

von bodo » 31 Okt 2004, 20:26

Muß jetzt noch in den MainFrame ins setProgramFilter noch ein invokeLater rein?

von Til » 31 Okt 2004, 20:01

setProgramFilter macht selbst nichts dramatisches. Es ruft jedoch updateTableContent auf und das hat eine Prüfung. Ich hab nur da Prüfungen reingebaut, wo auf die Variablen mChannelArr, mShownChannelArr, mProgramColumn oder mShownProgramColumn zugegriffen wird. Die enthalten die eigentliche Model-Information.

von bodo » 31 Okt 2004, 19:42

Du hast bei den setProgramFilter keine Thread-Überprüfung eingebaut. War das absicht ;) ?

von Til » 30 Okt 2004, 14:42

Alla gud, dann mach ich das mal...

von bodo » 30 Okt 2004, 09:24

OK. Klingt gut!

von Til » 30 Okt 2004, 09:16

Das bringt nicht viel. Es ist blöd, wenn man sich nicht darauf verlassen kann, dass getRowCount() in der nächsten Sekunde sich geändert hat, wenn man es aufruft.

Ich fände besser, wenn alles, was im TableModel gemacht wird, im Swing-Thread zu passieren hat. Dann können wir uns den synchronized-Kram sparen, der ja auch nur bedingt weiterhilft. Es hilft ja niemand was, wenn die Methoden des TableModel selbst synchronisiert sind, aber der aufrufende Kontext nicht.

Ich schlage deshalb vor, dass wir die synchronized-Sachen wieder rauskicken und durch Prüfungen ersetzten, die schauen, dass auch ja der richtige Thread genutzt wird. In der Entwicklerversion können wir bei einer Verletzung eine Exception schmeissen, so finden wir wohl recht schnell alle Stellen, die am Model herumpfuschen und können sie in ein SwingUtilities.invokeLater() verpacken. Danach können wir eine einfache Warnung ausgeben.

von bodo » 29 Okt 2004, 18:39

Til, da muss das Model noch Synchronisiert werden, oder?

von platin(x) » 29 Okt 2004, 18:23

Menübar, Ansicht => Filter

von bodo » 29 Okt 2004, 16:51

Wie hast du den Filter gewechselt? So wie's aussieht hat der beim Neuzeichnen den Filter reingehauen, so das der nich mehr die richtige Anzahl von Spalten hatte ?!

Fehler in Programmtabelle

von platin(x) » 29 Okt 2004, 16:41

Mit der aktuellen CVS-Version, nachdem ich ein anderen Filter gewählt hatte.
Ein nicht behandelter Fehler ist aufgetreten

----- Start of stacktrace -----
java.lang.ArrayIndexOutOfBoundsException: 3
at tvbrowser.ui.programtable.DefaultProgramTableModel.getRowCount(DefaultProgramTableModel.java:289)
at tvbrowser.ui.programtable.ProgramTable.paintComponent(ProgramTable.java:215)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(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.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(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)
----- End of stacktrace -----

Nach oben