Excpetion füllen/entleeren von JTable

Raziell

Bekanntes Mitglied
Hallo zusammen,

habe ein Problem beim füllen oder leeren einer JTable. Die Excpetion fliegt manchmal beim befüllen, manchmal beim entleeren und manchmal garnicht.

So in etwa sieht der Stacktrace fast immer aus:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 0
	at java.util.Vector.elementAt(Unknown Source)
	at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
	at javax.swing.JTable.getValueAt(Unknown Source)
	at javax.swing.JTable.prepareRenderer(Unknown Source)
	at javax.swing.plaf.synth.SynthTableUI.paintCell(Unknown Source)
	at javax.swing.plaf.synth.SynthTableUI.paintCells(Unknown Source)
	at javax.swing.plaf.synth.SynthTableUI.paint(Unknown Source)
	at javax.swing.plaf.synth.SynthTableUI.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.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.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)

Hier mal ein paar Code-Beispiele:

Der Pool hält die Clients und benachrichtigt die GUI.

Java:
ublic class ClientPool extends Observable {

	private static ClientPool instance;
	private CopyOnWriteArrayList<Client> clients = new CopyOnWriteArrayList<Client>();

	private ClientPool() {
	}

	public synchronized static ClientPool getInstance() {
		if (instance == null) {
			instance = new ClientPool();
		}
		return instance;
	}

	public void addClient(Client client) throws SocketException {
		clients.add(client);
		startClientListener(client);
		change();
	}

	private void startClientListener(Client client) {
		new ClientListener(client);
	}

	public void removeClient(Client client) {
		clients.remove(client);
		change();
	}

	private void change() {
		setChanged();
		notifyObservers(clients);
	}

	public CopyOnWriteArrayList<Client> getClients() {
		return clients;
	}

Hier ein paar ausschnitte aus der GUI.

Java:
	@Override
	public void update(Observable o, Object arg) {
		if (arg instanceof StringBuilder) {
			addMessage((StringBuilder) arg);
		} else if (arg instanceof CopyOnWriteArrayList<?>) {
			createTable((CopyOnWriteArrayList<?>) arg);
		}
	}


	@SuppressWarnings("unchecked")
	public void createTable(CopyOnWriteArrayList<?> param) {

		CopyOnWriteArrayList<Client> clients = (CopyOnWriteArrayList<Client>) param;

		model.setRowCount(0);

		for (Client client : clients) {
			model.addRow(client.getDates());
		}

		int j = 1;
		for (int i = 0; i < model.getRowCount(); i++) {
			table.setValueAt("" + j, i, 0);
			j++;
		}
	}

Ich vermute mal das ganze hat iwas. mit der aktualisierung des TableModels zu tun.
Ich verwende das DefaultModel.

Gruß und Danke
 
S

SlaterB

Gast
Datenänderungen der GUI besser nur in
Java:
SwingUtilities.invokeLater(new Runnable() {
  public void run() {
     // Code
  }
});
Blöcken schreiben, aber möglichst kurz, nicht sekundenlange Berechnungen, weil das die GUI blockiert,
rechnen gerne in separaten Threads, die fertigen Ergebnisse auf diesen Weg übertragen,

den Block kann man direkt in Methoden schreiben,
auf lokale Variablen oder Parameter zugreifen, wenn diese als final deklariert sind,
mit den Stichwörtern kann man nach Beispielen suchen
 

Raziell

Bekanntes Mitglied
Hi,

erstmal danke für die Antwort. Also du meinst das ich quasi Zeile 16-20 in den invokeLater Block
auslagern sollte? Also an den Stellen, an denen ich das Model ändere?

Achso meine GUI ansich läuft bereits mit invokeLater im EDT und lediglich die Methode removeClient kann von mehreren Threads zu jederzeit aufgerufen werden. Die Methode addClient wird nur aus einem einzigen Thread aufgerufen. Vllt. hilft das ja den Fehler einzugrenzen.
 
S

SlaterB

Gast
du hast zwei Code-Blöcke, in beiden klingt Zeile 16-20 nach einem Kandidaten (ok, eher der zweite),
im zweiten Code-Block der spätere Code mit table.setValueAt() ebenso,
was du alles machen musst und wo bei dir welche Threads agieren, kann ich nicht sagen

je mehr vom EDT gemacht wird, desto weniger Exceptions beim painten,
die Gefahr ist lediglich eine blockierte GUI, eben weil vor lauter Arbeit gar keine Zeit mehr zum painten + Ereignisverarbeitung ist
 

Raziell

Bekanntes Mitglied
Ja ich meinte den zweiten Code-Block :)
Also ich werde es heute Abend mal testen und dann berichten was passiert.

Was mich wunder ist, dass die Darstellung der Daten trotz Exception einwandfrei funktioniert und das ich in keinem anderen meiner Programme diesen Fehler hatte, obwohl ich immer das gleiche Prinzip verwendet habe.

Noch erwähnen sollte ich vielleicht, dass der Fehler nur aufgetreten ist, als ich in einer Schleife testweise ca. 50-100 Clients am Server angemeldet habe. Das heisst die update() und die createTable() Methode werden dann halt auch 50-100 mal in kürzester Zeit aufgerufen.
 

Raziell

Bekanntes Mitglied
Moin,

also sieht so aus als würde es jetzt funktionieren.

Aber nochmal fürs Verständnis: Ist die Exception geflogen, weil der Renderer das Model zeichnet während ich es ändere?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Jlist füllen AWT, Swing, JavaFX & SWT 4
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
izoards JavaFX TableView mit Array Inhalt füllen AWT, Swing, JavaFX & SWT 1
maximizer JavaFX Accordion mit eigenen TitledPanes füllen AWT, Swing, JavaFX & SWT 0
W TableView füllen AWT, Swing, JavaFX & SWT 18
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
D Columns unabhängig voneinander mit Daten füllen JavaFx AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
G JTable füllen AWT, Swing, JavaFX & SWT 1
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
F JavaFX ListView füllen in Controller Class AWT, Swing, JavaFX & SWT 12
K Swing JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 4
N JavaFX Füllen von ausgewählten Pfadelementen AWT, Swing, JavaFX & SWT 1
D Textfield bei starten füllen. AWT, Swing, JavaFX & SWT 5
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
O Swing JTable per Scrollen füllen! AWT, Swing, JavaFX & SWT 7
H Quadrate dnamisch erzeugen und beliebig füllen AWT, Swing, JavaFX & SWT 7
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
J JEditorPane mit HTML füllen AWT, Swing, JavaFX & SWT 2
O JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 3
1 Liste mit Objekten Füllen AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Datenbank füllen AWT, Swing, JavaFX & SWT 16
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
H JTable von anderer Klasse aus füllen AWT, Swing, JavaFX & SWT 6
C SWT Combobox mit Textdatei füllen AWT, Swing, JavaFX & SWT 2
P Swing JtextArea füllen mit setText AWT, Swing, JavaFX & SWT 7
S JComboBox mit Ergebnis einer SQL Abfrage füllen AWT, Swing, JavaFX & SWT 39
X JTable mit verschiedenen Objekten füllen AWT, Swing, JavaFX & SWT 14
C JFrame - Löschen und neu füllen AWT, Swing, JavaFX & SWT 9
C JList mit Vector füllen AWT, Swing, JavaFX & SWT 3
Ollek Realisierung: JTable zur Laufzeit mit neuen Daten füllen AWT, Swing, JavaFX & SWT 3
S Swing JTextArea während der Laufzeit füllen AWT, Swing, JavaFX & SWT 5
F Fläche invertiert füllen AWT, Swing, JavaFX & SWT 2
A Swing JTable spaltenweise füllen AWT, Swing, JavaFX & SWT 3
E Swing JLabel mit unicode füllen AWT, Swing, JavaFX & SWT 7
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
K TableModel mit Daten aus Datenbank füllen AWT, Swing, JavaFX & SWT 7
M Liste mittels SwingWorker füllen klappt nicht AWT, Swing, JavaFX & SWT 10
M GridBagLayout zeilenweise füllen AWT, Swing, JavaFX & SWT 5
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
E JCombobox mit Daten aus DB füllen AWT, Swing, JavaFX & SWT 9
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
L JTree Selektion "füllen" AWT, Swing, JavaFX & SWT 4
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
U JTable mit Daten aus einer HashMap füllen AWT, Swing, JavaFX & SWT 8
S JTree mit Daten aus Model füllen, eigenes TreeModel (gute Dokumentation des Problems) AWT, Swing, JavaFX & SWT 2
C JList: Eintrag anklicken & JTextfield mit Text aus MySQL füllen? (Screenshot dabei) AWT, Swing, JavaFX & SWT 8
F JList füllen mit LinkedList-Elementen AWT, Swing, JavaFX & SWT 21
Spot84 jtable mit checkboxnode dynamisch per arraylist füllen AWT, Swing, JavaFX & SWT 8
J jTabbedPane mit jPanel füllen AWT, Swing, JavaFX & SWT 14
N Gridlayout 2. Spalte füllen AWT, Swing, JavaFX & SWT 4
M jLabel mit Bild füllen? AWT, Swing, JavaFX & SWT 7
B Einfaches JScrollPane mit Bildern füllen AWT, Swing, JavaFX & SWT 2
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
G Jpanel mit Hintergrundbild füllen? AWT, Swing, JavaFX & SWT 6
G jTable, spezille Zelle automatisch füllen AWT, Swing, JavaFX & SWT 13
P JTable/Model füllen mit Fortschrittsbalken, Var. Rückgabetyp AWT, Swing, JavaFX & SWT 2
M JList: wie füllen? AWT, Swing, JavaFX & SWT 2
O JTable mit objekt-daten füllen AWT, Swing, JavaFX & SWT 4
G jList mit ArrayList füllen AWT, Swing, JavaFX & SWT 3
G JTable aus Datenbank füllen AWT, Swing, JavaFX & SWT 4
J Dynamisches füllen von GridBagLayout: Größe der Komponenten AWT, Swing, JavaFX & SWT 4
G JTable Zeile mit Farbe füllen AWT, Swing, JavaFX & SWT 2
B Bild(pixel) füllen AWT, Swing, JavaFX & SWT 6
S JTree mit eigenen Objekten füllen AWT, Swing, JavaFX & SWT 4
A Beim Füllen von JList entsteht ein komisches Phänomen AWT, Swing, JavaFX & SWT 3
G Jtable mittels Liste füllen AWT, Swing, JavaFX & SWT 3
A JListe mit Daten füllen AWT, Swing, JavaFX & SWT 3
A Textfeld nach ereigniss füllen AWT, Swing, JavaFX & SWT 7
M JList mit unbestimmter Anzahl Panels füllen AWT, Swing, JavaFX & SWT 4
D mit swt.virtual mehrspaltige tabellen füllen AWT, Swing, JavaFX & SWT 3
R Komponente (Frame) in anderer Klasse füllen AWT, Swing, JavaFX & SWT 18
A JTable mit MySQL Datenbank füllen AWT, Swing, JavaFX & SWT 12
H JComboBox mit den Daten eines Vectors füllen ? AWT, Swing, JavaFX & SWT 7
R JTable mit Daten aus der Datenbank füllen AWT, Swing, JavaFX & SWT 3
H JTree nach instanzierung füllen AWT, Swing, JavaFX & SWT 4
H Probleme JTable zu füllen AWT, Swing, JavaFX & SWT 4
D SWT-GUI von aussen füllen (Multi Threaded) AWT, Swing, JavaFX & SWT 2
J JTable-Zeilen mit Werten füllen AWT, Swing, JavaFX & SWT 7
G Probleme beim Füllen einer JTable AWT, Swing, JavaFX & SWT 2
G JList mit Daten füllen wie die normale DOS-Konsole AWT, Swing, JavaFX & SWT 2
M JComboBox aus Datenbank mit 2 Werten füllen AWT, Swing, JavaFX & SWT 5
O JTextArea entleeren?!! AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben