JTable mit großer Anzahl von Datensätzen

y20frank

Mitglied
Hallo zusammen,

mit dem beigefügten Code-Auszug versuche ich aus einer Notes Datenbank (wobei die Datenquelle m.E. hierbei erstmal nachrangig sein dürfte) eine Menge an Datensätzen in eine JTable zu schreiben. Das ganze funktioniert zunächst auch wunderbar mit einer begrenzten Anzahl von Datensätzen. Nehme ich die Begrenzung raus, bekomme ich jedoch bei ca. 90.500 Datensätzen einen Abbruch (Fehlermeldungstext in rot). Die Datenbank enthält insgesamt derzeit ca. 240.000 Datensätze.
Gibt es ein Limit der Anzahl der Reihen in einer JTable? Kann man das Limit "raufsetzen" oder was scheint hier das Problem zu sein. Hat jemand ggf. einen Hinweis?! Vielen Dank schon mal.


java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
at java.util.Vector.elementAt(Vector.java:341)
at notesappl.LN_App_GetDataInJTable.jButton1ActionPerformed(LN_App_GetDataInJTable.java:185)
at notesappl.LN_App_GetDataInJTable.access$1(LN_App_GetDataInJTable.java:165)



Code:
NotesThread.sinitThread(); // start thread
// Operational code goes here
Session s = NotesFactory.createSession();
Database db = s.getDatabase("DominoServer1", "test\notesdatenbank.nsf");
if (db.isOpen()) {
	System.out.println(db);
	System.out.println(db.getTitle());

	View view = db.getView("Import");
	Document doc = view.getFirstDocument();
	Document tmp;
	DocumentCollection dc = db.getAllDocuments();
	doc = dc.getFirstDocument();
	int i = 0;
	while (doc != null) {

		if (doc.hasItem("JavaTest")) {
			System.out.println(i++);	// Einlesen und Datensatz in Tabelle einfügen
			model.insertRow(jTable1.getRowCount(), new Object[] { i, doc.getItemValue("Nachname").elementAt(0).toString(), doc.getItemValue("Vorname").elementAt(0).toString(), doc.getUniversalID().toString() });
			//if (i == 1000) {
			//	break;
			//}
		}
		tmp = dc.getNextDocument(doc); // Look --> http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Java_memory_management_in_NotesDomino
		doc.recycle(); // also killls Item
		doc = tmp;
		doc = dc.getNextDocument(doc);
	}
	
	// . . .
}

Besten Gruß
Frank
 
Moin,

wie die Fehlermeldung besagt, greifst Du irgendwo auf ein Array mit zu großem Index zu (also einem, der nicht vorhanden ist) !
Dies scheint in der Methode "LN_App_GetDataInJTable.jButton1ActionPerformed" zu passieren, wo Du wohl auf irgendeinen Vektor mit "elementAt()" zugreifst ...

Mehr kann ohne den relevanten Code nicht gesagt werden!

Gruß
Klaus
 
Hallo Klaus,

vielen Dank für die prompte Antwort. Den Fehler habe ich gefunden. Leider spielte die Datenquelle doch eine Rolle.

Und zwar gab es beim Auslesen der Daten aus dem Notes-Dokument in der ganzen Menge tatsächlich eines ohne Inhalt im Feld "Nachname", so dass es bei
Code:
...doc.getItemValue("Nachname").elementAt(0).toString()...
"geknallt" hat. Das war der Fehler und Dein Hinweis auf das Array korrekt... hätte ich auch selbst drauf kommen können, aber manchmal braucht man eben einen kleinen Schubser.

Vielen Dank also und besten Gruß
Frank
 
Kein Thema - dafür machen wir das hier ja 😀

Tipp für die Zukunft :
wenn du Dein Programm in so einem Fall im Debugger laufen läßt, dann kann Du - wenn der Fehler auftritt - in der Konsole, wo die Exception zu sehen ist, dann auf die Zeile
Java:
at notesappl.LN_App_GetDataInJTable.jButton1ActionPerformed(LN_App_GetDataInJTable.java:185)
klicken und kommt genau an die Codestelle, wo der Fehler auftritt. Dort kann man dann ggf. die Werte von Variablen, Objekten etc. prüfen.

Aus Deinem Codeschnipsel war das so leider nicht wirklich ersichtlich, denn das verstecke "elementAt" habe ich dort übersehen ....

Gruß
Klaus
 

Zurück
Oben