ArrayList add, IndexOutOfBoundsException

sMau90

Aktives Mitglied
Hey,
Ich habe folgenden Code

Java:
/*
	 * wenn leer -> neue Liste mit Dateien u. erstes Bild laden wenn nicht leer
	 * -> Dateien Anhängen
	 */
	public void setMyFiles(File[] imagesfile) {
		
		MyFile[] images = MyFile.fileToMyFile(imagesfile); 
		
		
		if (bildDateien.isEmpty()) {
			
			bildDateien.ensureCapacity(images.length);
			
			for (int i = 0; i < images.length; i++) {

				bildDateien.add(i, images[i]);
				setImageIconDisplay((MyFile) bildDateien.get(0));
				currentID = 0;
			}
		} else {
			
			bildDateien.ensureCapacity(bildDateien.size() + images.length);
			
			for (int j = 0; j < images.length; j++) {

				bildDateien.add((bildDateien.size() + j), images[j]);

			}
		}

		DateiVerwaltungPanel.setListElements(bildDateien); //fügt Elemente der ArrayList in eine Tabelle ein
	}

MyFile ist eine Erweiterung der Klasse File.
Das File[] Array kommt von nem JChooser und wird an die Methode übergeben.
Es geht um den else-Zweig, in Zeile 26 wirft er immer eine "IndexOutOfBoundsException" wenn bereits Elemnte in der ArrayList "bildDateien" und ein File[] Array übergeben wird in dem mehr als eine Datei enthalten ist. Wenn das übergebene Array nur ein Element enthält wird dieses problemlos angehängt. Kann mir jemand sagen wieso?

Danke schonmal.
Grüße,
sMau
 
Zuletzt bearbeitet:
Hi,
meine erste Idee wäre:
Java:
bildDateien.ensureCapacity(images.length+bildDateien.size());
die Methode sichert ja nur die Größe, einfügen tust du aber jeweils an das Ende der Liste.
Nun könnte folgendes passieren:
In deiner Liste sind 4 Elemente, du willst 10 Elemente in deine Liste einfügen.
Erst vergrößerst du die Liste auf Size 10. Dannach fügst du an size+j ein, also an 4-14. Und schon knallts 😉
Falls es daran nicht lag einfach bescheid sagen ^^
Gruß
 
Diese Zeile ist das Problem:
Code:
(bildDateien.size() + j)
. Warum fügst du die nicht einfach mit
Code:
add
an?
Weil überleg mal: du hast 10 Bilder--> das erste mal 10 + 0 und das letzte sogar 10+9 =19.

Du kannst mit dem Index nur eine Zahl zwischen 0 und der Größe der Arraylist -1 eingeben (Sprich der letzten Stelle) angeben ArrayList (Java Platform SE 6) --> siehe Kommentar ganz unten bei deiner Exception
 
Ich bin auch der Meinung, dass es an
Code:
(bildDateien.size() + j)
liegt.
Nehmen wir mal an, dass du bereits 10 Bilder hast und 2 hinzufügst.
Index 0 bis 9 sind also bereits belegt. Beim ersten Schleifendurchlauf ist die Größe 10 und j ist 0. Es sollte also erfolgreich ein Bild hinzugefügt werden. Beim 2. Durchlauf ist die Größe allerdings 11 (die ändert sich ja 😉) und j ist 1. Du berechnest also 12 als Index und 11 wird übersprungen. Deswegen ist dein Index außerhalb der Grenzen.

Du solltest, wie Eldorado bereits vorgeschlagen hat, einfach [c]add[/c] benutzen, weil du nur etwas an das Ende der Liste anfügst. [c]add[/c] mit Index ist dafür gedacht Elemente zwischen anderen Elementen einzufügen.
 

Zurück
Oben