Ich habe hier einen Ordner mit ungefaehr 1000 thumbnails, die ich gerne anzeigen lassen moechte. Insgesamt sind die thumbnails nur 10MB gross, von daher sollte das kein Problem sein, doch ich erhalte jedesmal ein outOfMemory Error und ich weiss echt nicht mehr weiter. Ich hab alles ausprobiert was ich im Internet finden konnte, doch immer das gleiche.
Ich weiss, ich kann durch -Xms den Speicherbedarf erhoehen, aber mein Programm sollte nicht mehr als 64MB gebrauchen.
Hier mal der komplette code, der die Thumbnails ladet und anzeigt:
Code:
protected void doInBackground() throws Exception {
String path = "C:\\Documents and Settings\\Apokalyps\\My Documents\\pics\\thumbnails";
File folder = new File(path);
FilenameFilter filter = new FileListNames();
File[] listOfAllFiles = folder.listFiles(filter);
progressBar.setStringPainted(true);
try{
for (int i = 0; i < listOfAllFiles.length;i++){
if ((listOfAllFiles[i].getPath().toLowerCase().endsWith("jpg")) || (listOfAllFiles[i].getPath().toLowerCase().endsWith("gif"))){
icon = new ImageIcon(listOfAllFiles[i].getPath());
button = new JButton(icon);
button.setName(listOfAllFiles[i].getPath());
progressBar.setValue(i);
mainBilderPanel.add(button);
// button = null;
// icon = null;
}
}
}
catch (NullPointerException npe){}
barFrame.dispose();
mainBilderPanel.revalidate();
}
Ich hoffe nur, dass einer von euch mir weiterhelfen kann.
die 1000 thumbnails werden doch ohnehin nicht alle gleichzeitig zu sehen sein? also immer nur die laden, die gerade sichtbar sind. warum die beschränkung auf 64mb? außerdem könnte es hilfreich sein nicht für jedes bild einen eigenen button zu erzeugen. schreib lieber deine eigene komponente, die mehrere thumbnails anzeigt.
Also jedes der thumbnails ist 33x33 gross. Das sollte auch dekomprimiert nicht zu gross sein. Hab den heap auf 512mb gesetzt, doch das problem tritt trotzdem auf, zwar bisschen spaeter aber es tritt auf.
@Kim Stebel
Ich habe vor 2 Monaten mit Java angefangen und weiss leider nicht, wie man sich eine eigene Komponente schreiben kann.
Was meinst du mit "Immer nur die Laden, die sichtbar sind"? Alle thumbnails werden in einem Panel geladen mit einem scrollBalken.
Ich hab das Programm mal durch JProfiler durchlaufen lassen und herausgefunden das ein Array vom Typ Int[] 61MB gross ist und daher der Fehler auftritt. Nur weiss ich nicht was genau dieser Array ist.