Löschen von Objekten während Iteration über Liste

M

MasseElch

Aktives Mitglied
Hallo Forum.

Ich habe eine Liste mit Objekten der Klasse SlideShowImage. Die Klasse enthält ein Attribut dirPath das sagt aus welchen Ordner das Bild stammt.

Ich lasse in einer ComboBox alle Ordner anzeigen, die ein Bild in die Liste geliefert haben. Nun möchte ich in der ComboBox einen Ornder auswählen und dann alle Bilder, die von dort kommen aus der Liste entfernen.

Dazu habe die diese Methode geschrieben:

Java:
public void removeImages(String key) {
		for (Iterator<SlideShowImage> imageListIter = this.imageList.iterator(); imageListIter.hasNext();) { 
			SlideShowImage img = imageListIter.next(); 
			if(img.getDirPath().equals(key)) {
				imageListIter.remove(); 
		    }
		}
	}

Der Aufruf derMethode:

Java:
slideShow.getImageList().removeImages((String) gui.getComboBox().getSelectedItem());

Es passiert leider gar nischt :-(
Kann man überhaupt so casten wie ich das gemacht habe? Und wenn ja was mache ich dann verkehrt?

Lg
MasseElch
 
J

JavaMeister

Gesperrter Benutzer
Hier gibt es viele Fehlermöglichkeiten.

Hast du schon mal da durchgedebugged?

Z.b mit System.out.println an geeigneter stelle?
 
S

sirkarpfen

Mitglied
Eine mögliche Erklärung wäre, dass

Java:
if(img.getDirPath().equals(key))

immer false zurückgibt. Da du ja das selectedItem der Combobox auf String castest könnte da der Fehler liegen.

gruß sirkarpfen
 
M

MasseElch

Aktives Mitglied
Ja, hatte das hier:

Java:
public void removeImages(String key) {
		for (Iterator<SlideShowImage> imageListIter = this.imageList.iterator(); imageListIter.hasNext();) { 
			SlideShowImage img = imageListIter.next(); 
			if(img.getDirPath().equals(key)) {
				imageListIter.remove(); 
				System.out.println(img.getDirPath());
		    }
		}
	}

Ich hab das mal mit einer Liste laufen lassen, wo alle Bilder aus dem Ordner example stammen.

Ausgabe war:

Code:
example

Sollte doch aber für jedes Bild eine Ausgabe kommen, richtig?
Was mich auch verwirrt.

Und da ich innerhalb der If Anweisung bin, wird imageListIter.remove() ja ausgeführt, trotzdem klappt es nicht.
 
K

Klösp

Aktives Mitglied
Ich hätte jetzt gesagt, dass das daran liegt, dass man in einer Iteration die Menge nicht modifizieren darf (remove).
Aber dann müsstest du denke ich eine ConcurrentModificationException bekommen.
 
Zuletzt bearbeitet:
S

sirkarpfen

Mitglied
Es wäre, wenn möglich, auch sinnvoll wenn du mal die Klasse ImageList mitlieferst, damit wir uns einen genaueren Überblick machen können. Aus der einzelnen Methode lässt sich leider nicht viel rauslesen :).
 
M

MasseElch

Aktives Mitglied
Ich hätte jetzt gesagt, dass das daran liegt, dass man in einer Iteration die Menge nicht modifizieren darf (remove).
Aber dann müsstest du denke ich eine ConcurrentModificationException bekommen.

Ich habe ja aus genau dem Grund die Möglichkeit mit dem Iterator genutzt, damit eben das nicht passiert. Zumindest war das der Plan dahinter :oops:

Hier die Klasse

Java:
package slideShowObjects;

import java.awt.Toolkit;
import java.util.LinkedList;
import java.util.List;
import java.util.Iterator;

public class ImageList {

	/**
	 * the images shown by slideShow
	 */
	private List<SlideShowImage> imageList;
	
	/**
	 * constructor
	 */
	public ImageList() {
		//create instance so we do not get problems on start up
		this.imageList = new LinkedList<SlideShowImage>();
	}
	
	/**
	 * append a list with new images for the slideShow
	 * @param newImages the new imageList
	 */
	public void appendNewImages(List<SlideShowImage> newImages) {
		
		this.imageList.addAll(newImages); 
		this.refactor();
	}
	
	/**
	 * sets the yPos of all images and makes sure everything slides right
	 */
	private void refactor() {
		
		int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
		int imageHeight = screenHeight/5;
		int refactor = -imageHeight;
		
		for(SlideShowImage img : this.imageList) {
			img.setyPos(refactor);
			refactor -= imageHeight +20;
		}
	}
	
	/**
	 * remove all images which are from the given path
	 */
	public void removeImages(String key) {
		for (Iterator<SlideShowImage> imageListIter = this.imageList.iterator(); imageListIter.hasNext();) { 
			SlideShowImage img = imageListIter.next(); 
			if(img.getDirPath().equals(key)) {
				imageListIter.remove(); 
				System.out.println(img.getDirPath());
		    }
		}
		refactor();
	}

//SETTERS & GETTERS
	
	/**
	 * return the list with images
	 */
	public List<SlideShowImage> getImageList() {
		return this.imageList;
	}
}

Und wenn das auch ützlich sein könnte:
DIe Methode wird aus einer ButtonListener-Klasse heraus aufgerufen:

Java:
 if(pressedButton == gui.getButtonDeleteDirectory()) {
			if(this.slideShow.getRunning()) {
				this.slideShow.setRunning(false);
				gui.getButtonPlay().setText("Play");
			}
			slideShow.getImageList().removeImages((String) gui.getComboBox().getSelectedItem()); 
			gui.getComboBox().removeItem(gui.getComboBox().getSelectedItem());
 
Zuletzt bearbeitet:
M

MasseElch

Aktives Mitglied
Leider nach wie vor keine Lösung des Problems.

Hat noch wer Ansätze/Ideen? Alternativvorschläge?

Lg
MasseElch
 
S

sirkarpfen

Mitglied
Stehen bei dir in der Combobox die absoluten Pfade zu den Bildern? Bzw. was genau ist bei dir in der Combobox gespeichert?

Es kann sein das img.getDirPath() den absoluten Pfad zurückgibt und deshalb img.getDirPath.equals(key) immer false zurückgibt.

Alternativ könntest du es mal probieren beim iterieren eine while() Schleife zu verwenden:

Java:
Iterator<SlideShowImage> imageListIter = this.imageList.iterator();
while(imageListIter.hasNext()) {
    // remove stuff
}
 
Zuletzt bearbeitet:
M

MasseElch

Aktives Mitglied
Hallo,

danke für die Antwort.

Mit der while-Schleie passt es nun. Danke!!

Lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Frage zum Löschen von Objekten Java Basics - Anfänger-Themen 2
A löschen von Objekten? Java Basics - Anfänger-Themen 6
R Löschen und ausgeben eines Teilbaums Java Basics - Anfänger-Themen 3
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
V_Fynn03 Lineare Datenstrukturen Element löschen? Java Basics - Anfänger-Themen 2
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
S Windows printerqueue mit Java löschen Java Basics - Anfänger-Themen 3
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
M Image löschen Java Basics - Anfänger-Themen 2
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
O Element aus Array löschen Java Basics - Anfänger-Themen 5
steven789hjk543 Kann ich manche Versionen des jdk löschen? Java Basics - Anfänger-Themen 6
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
T Löschen in doppelt verketteter Liste Java Basics - Anfänger-Themen 1
A Größten Eintrag aus Binärbaum löschen Java Basics - Anfänger-Themen 4
J am Anfang eines String ein Leerzeichen löschen Java Basics - Anfänger-Themen 6
Z Vocale löschen Java Basics - Anfänger-Themen 3
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
M Ordner mit Inhalt löschen Java Basics - Anfänger-Themen 7
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
R Datei löschen Java Basics - Anfänger-Themen 3
V Durch Methode Objekt löschen Java Basics - Anfänger-Themen 2
P Verbindung von Zwei Kreisen löschen ! Java Basics - Anfänger-Themen 6
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
I Hilfe beim löschen von Buchstaben. Java Basics - Anfänger-Themen 1
I Hilfe beim löschen schon Buchstaben. Java Basics - Anfänger-Themen 4
J Kann eine .jar sich selber Löschen? Java Basics - Anfänger-Themen 5
D Projekte + Datum + löschen Java Basics - Anfänger-Themen 11
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
O Hilfestellellung bei Rekursivem Löschen Java Basics - Anfänger-Themen 11
N Generischer Binärbaum - löschen Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
G zeichen einer Zeile löschen Java Basics - Anfänger-Themen 4
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1
F Element aus LinkedList löschen Java Basics - Anfänger-Themen 3
B lanterna einzelne Zeichen aus dem Terminal löschen Java Basics - Anfänger-Themen 0
S jList --> Array einfügen und Liste löschen Java Basics - Anfänger-Themen 5
O Löschen lange pfade...Fehler? Java Basics - Anfänger-Themen 1
O Eclipse Liste Löschen Java Basics - Anfänger-Themen 5
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
K Klassen Objekte löschen Java Basics - Anfänger-Themen 11
B Methoden BinärBaum als String Knoten löschen Java Basics - Anfänger-Themen 5
D String in Datei suchen und löschen Java Basics - Anfänger-Themen 2
S Grafik löschen Java Basics - Anfänger-Themen 10
L Daten aus Array Feld löschen Java Basics - Anfänger-Themen 2
X Erste Schritte Großschreibung löschen Java Basics - Anfänger-Themen 5
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
I Zwei Listen: Wenn nicht vorhanden löschen Java Basics - Anfänger-Themen 4
E Arrayeintrag nach Index löschen und Array kürzen Java Basics - Anfänger-Themen 3
thet1983 g.Graphics löschen? Java Basics - Anfänger-Themen 1
GadgetSofa .txt Datei erstellen und gleich wieder Löschen? Java Basics - Anfänger-Themen 12
P Doppelte Datensätze aus CSV-Datei löschen Java Basics - Anfänger-Themen 17
M Java Datei soll sich selbst löschen Java Basics - Anfänger-Themen 8
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
I Element löschen aus der Liste Java Basics - Anfänger-Themen 2
S Einen Eintrag im Array löschen? Java Basics - Anfänger-Themen 11
J ArrayList Objekt löschen Java Basics - Anfänger-Themen 6
M Variablen Daten aus Array löschen Java Basics - Anfänger-Themen 2
B Klassen Obejekte in Java "Löschen" Java Basics - Anfänger-Themen 11
M ArrayList-Element hinzufügen u. löschen Java Basics - Anfänger-Themen 2
B Ordner leeren/löschen Java Basics - Anfänger-Themen 5
I .txt Datei Zeile löschen. Java Basics - Anfänger-Themen 13
R Doppelte löschen Java Basics - Anfänger-Themen 6
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
H Textfeldinhalt löschen nachdem Frame geschlossen wird Java Basics - Anfänger-Themen 8
S Vokale am Ende von Wörtern löschen Java Basics - Anfänger-Themen 7
W Löschen Datenknoten Suchbaum Java Basics - Anfänger-Themen 4
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
T Sting -> Array, leere Stellen löschen Java Basics - Anfänger-Themen 6
L Split + Zeilen einer Datei mit bestimmtem Inhalt löschen Java Basics - Anfänger-Themen 23
M Daten in ArrayList löschen Java Basics - Anfänger-Themen 15
H Einträge aus Array löschen Java Basics - Anfänger-Themen 8
B mit einem Iterrator elemente aus einer liste löschen Java Basics - Anfänger-Themen 3
X Methoden Wort aus String löschen und richtige Verschachtelung Java Basics - Anfänger-Themen 17
N 'null' aus String löschen Java Basics - Anfänger-Themen 7
G Queue auf einer Seite löschen, andre Seite schreiben Java Basics - Anfänger-Themen 3
D File löschen? Java Basics - Anfänger-Themen 7
B Konsoleninput eingegebene linie nach Eingabe löschen Java Basics - Anfänger-Themen 5
D Canvas löschen über MouseEntered in Textfeld Java Basics - Anfänger-Themen 6
M Gewisse Einträge aus einer ArrayList löschen Java Basics - Anfänger-Themen 3
B JLabel löschen/überschreiben Java Basics - Anfänger-Themen 10
C Löschen der Vokale Java Basics - Anfänger-Themen 20
X Erste Schritte Java JTable leere Reihen löschen Java Basics - Anfänger-Themen 2
D Ausgegebene Worte wieder löschen. Java Basics - Anfänger-Themen 6
V Objekt löschen wenn anderes gelöscht wurde Java Basics - Anfänger-Themen 11
S Einzelne Werte von Array-Feld löschen Java Basics - Anfänger-Themen 15
M Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 17
N Auomatisiertes löschen von Bilddateien, Erkennung durch Existenz in Text Java Basics - Anfänger-Themen 13
H Input/Output Console löschen und Eingaben in Echtzeit Java Basics - Anfänger-Themen 3
M Datei löschen, klappt nicht Java Basics - Anfänger-Themen 3
N Dateien bestimmten Typs löschen Java Basics - Anfänger-Themen 6
D Erste Schritte RandomAccessFile "Leerzeichen" löschen Java Basics - Anfänger-Themen 6
H Arrays, Elemente löschen Java Basics - Anfänger-Themen 12
M Binärbaum - Problem bei Knoten anhängen / löschen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben