BufferedImage löschen

Status
Nicht offen für weitere Antworten.

---

Aktives Mitglied
Hallo,

ich möchte ein BufferedImage löschen.
Reicht es wenn ich das Panel auf dem es gezeichnet wird leere?
Code:
panel.add(bufferedImage);
...
...
panel.removeAll ();

Oder gibt es einen Befehl, um den Zeitpunkt selbst zu bestimmen wann es gelöascht wird?

bufferedImage.delete?? oder so??
Oder zum zerstören des Objektes?

schon mal vielen Dank!
 
sorry, für die späte antwort, aber ich ging davon aus, daß dieser thread hier schon beantwortet ist (wie warscheinlich die meißten hier im forum). tut mir leid das zu sagen (ich sage ungerne etwas negatives über andere user, vor allem, wenn ich sie nicht kenne), aber das was mika.fhdw da von sich gegeben hat, ist wohl mehr als quatsch ???:L

1. :meld: die klasse Container, von der Panel wie auch JPanel erbt, deklariert die methoden add(Component) und remove(Component), sowie removeAll(). von einer remove(BufferedImage) steht nirgends was geschrieben, nicht mal im sourcecode des SDK. allerhöchstens könnte man damit ein JLabel oder ein Canvas oder eine andere bildanzeigende Component verschwinden lassen, aber kein BufferedImage.

2. :meld: die klasse Image, von der ja auch BufferedImage erbt, besitzt die methode flush() um die von einem bild benötigten resourcen (arbeitsspeicher) freizugeben. mit remove(...) bzw. removeAll() ist das bild zwar nicht mehr auf der oberfläche sichtbar, aber selbst wenn alle referenzen darauf fallen gelassen wurden, wird es der GarbageCollector erst aus dem speicher werfen, wenn das bild geflushed wurde.

wünsche gutes gelingen

wayne
 
Hallo,

erstmal sorry fürs späte Antworten.
War ziemlich beschäftigt.

Also ich hab jetzt das bufferedImage vom Panel entfernt, dann bufferedImage = null. Und da es mehrere Images hintereinander gibt, System.gc aufgerufen.

Anscheinend hat man leider keinen Einfluss in java, wann der Garbage collector aufgerufen wird. Ist witzig, manchmal sind die "alten" bufferedImages noch im heap, der Zeitpunkt wann gc greift variert ziemlich.

Aber Hauptsache es funktioniert!

vielen Dank!!
 
wie gesagt, wenn du nur deine anzeige-component von der oberfläche entfernst und alle referenzen auf die bilder auf null setzt, wirst du sie weiterhin im speicher vorfinden. damit der garbage-collector sie entfernt musst du von jedem bild die methode flush() aufrufen. und anschließend dann System.gc(), dann sind sie wirklich weg.

viel erfolg

wayne
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben