Hi Leute,
ich hab ein Problem beim Laden von Bildern in ein Applet. Das Applet soll die Bilder als kleine Vorschau anzeigen.
Und solange ich wenig Bilder lade, geht auch alles gut. Sobald ich mehr Bilder laden kriege ich bei folgende Fehlermeldung.
Exception in thread "Thread-XY" java.lang.OutOfMemoryError: Java heap space
Die ersten ca. 20 Bilder werden fehlerfrei geladen. Danach geht gar nix mehr.
Die Bilder lade ich Verzeichnisweise mit einer for schleife:
dann wird das Ganze noch ein bischen weiter übergeben und dann kommt das laden:
Ich hab schon mit flush() versucht die Speicher wieder freizugeben. Aber irgendwie werden die anscheinend doch gecacht. Ich hab schon gegooglet aber irgendwie nich das gefunden was ich gesucht hab.
Das einzige was ich gefunden hab waren vielleicht die verwendung von VolatileImage oder einfach der Vergrößerung des Heap Space.
Wäre cool wenn jemand eine Idee hätte was ich ändern muss denn ich weiß nicht mehr was ich machen soll. Danke im vorraus.
ich hab ein Problem beim Laden von Bildern in ein Applet. Das Applet soll die Bilder als kleine Vorschau anzeigen.
Und solange ich wenig Bilder lade, geht auch alles gut. Sobald ich mehr Bilder laden kriege ich bei folgende Fehlermeldung.
Exception in thread "Thread-XY" java.lang.OutOfMemoryError: Java heap space
Die ersten ca. 20 Bilder werden fehlerfrei geladen. Danach geht gar nix mehr.
Die Bilder lade ich Verzeichnisweise mit einer for schleife:
Code:
File f = new File(directory);
File[] fList = f.listFiles();
for (int i = 0; i < fList.length; i++) {
try {
String name = fList[i].getName();
String ext = name.substring(name.lastIndexOf("."))
.toLowerCase();
int typ = 0;
if (ext.equals(".jpg"))
typ = Picture.JPG;
if (ext.equals(".bmp"))
typ = Picture.BMP;
if (ext.equals(".gif"))
typ = Picture.GIF;
if (ext.equals(".png"))
typ = Picture.PNG;
if (ext.equals(".tif"))
typ = Picture.TIF;
if (typ != 0)
addBildObjekt(fList[i].getAbsolutePath(), fList[i]
.length(), typ);
} catch (java.lang.StringIndexOutOfBoundsException e) {}
dann wird das Ganze noch ein bischen weiter übergeben und dann kommt das laden:
Code:
public void loadImage(String path) {
double scale = 0;
switch (typ) {
case JPG:
case GIF:
case PNG:
ImageIcon image = new ImageIcon(path);
this.width = image.getIconWidth();
this.height = image.getIconHeight();
this.width = 100;
this.height = 100;
if (width / 80.00 > height / 60.00)
scale = width / 80.00;
else
scale = height / 60.00;
this.iiBild = image.getImage().getScaledInstance(
(int) (width / scale), (int) (height / scale),
Image.SCALE_FAST);
iiBild.flush();
break;
case BMP:
case TIF:
Image temp = Jimi.getImage(path);
this.width = temp.getWidth(this);
this.height = temp.getHeight(this);
if (width / 80.00 > height / 60.00)
scale = width / 80.00;
else
scale = height / 60.00;
this.iiBild = temp.getScaledInstance(
(int) (width / scale), (int) (height / scale),
Image.SCALE_FAST);
temp.flush();
break;
}
}
Ich hab schon mit flush() versucht die Speicher wieder freizugeben. Aber irgendwie werden die anscheinend doch gecacht. Ich hab schon gegooglet aber irgendwie nich das gefunden was ich gesucht hab.
Das einzige was ich gefunden hab waren vielleicht die verwendung von VolatileImage oder einfach der Vergrößerung des Heap Space.
Wäre cool wenn jemand eine Idee hätte was ich ändern muss denn ich weiß nicht mehr was ich machen soll. Danke im vorraus.