Hallo,
ich hab mir, in einer GUI, eine kleine Thumbnail Bildvorschau gebastelt. Diese Funktioniert auch, jedoch gibt es hier und da ein paar "kleine" Probleme und allgemein würde mich interessieren ob die Lösung die ich hier gewählt habe überhaupt brauchbar ist oder es wo möglich sogar viel bessere Alternativen gibt.
Aus Gründen der Übersicht werde ich jetzt nicht den ganzen Code reinstellen, sondern nur die für mich wichtig erscheinenden Schnipsel. Im Allgemeinen habe ich in der GUI einen FileChooser der nur Directories anzeigt und Observable fungiert und einen anderen Panel als Observer, welcher dann die Bilder in Form von ImageIcons auf JLabels anzeigt.
Hier lese ich das Verzeichnis aus und erstelle die JLabel:
Hier wird dann das ImagIcon gesetzt und wieder zurück gegeben:
Nun zu meinen Problemen...
Wenn im Startverzeichnis mehr als 3 Bilder vorhanden sind, bekomme ich einen "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space Fehler. Die Anzeige funktioniert trotzdem! Wenn ich dann das Verzeichnis wechsle und exakt die selben Codezeilen mit dem Observer update abgearbeitet werden, tritt der "OutOfMemoryError" nicht bei über 200 Bildern auf?
Die nächste Frage wäre dann eben wie man eine große Anzahl von Bildern intelligent abarbeiten könnte, so dass einem lästige Wartezeiten erspart bleiben. Beispielsweise mit nem ViewPort oder Threads oder sowas?
Danke für die Hilfe
geneticZ
ich hab mir, in einer GUI, eine kleine Thumbnail Bildvorschau gebastelt. Diese Funktioniert auch, jedoch gibt es hier und da ein paar "kleine" Probleme und allgemein würde mich interessieren ob die Lösung die ich hier gewählt habe überhaupt brauchbar ist oder es wo möglich sogar viel bessere Alternativen gibt.
Aus Gründen der Übersicht werde ich jetzt nicht den ganzen Code reinstellen, sondern nur die für mich wichtig erscheinenden Schnipsel. Im Allgemeinen habe ich in der GUI einen FileChooser der nur Directories anzeigt und Observable fungiert und einen anderen Panel als Observer, welcher dann die Bilder in Form von ImageIcons auf JLabels anzeigt.
Hier lese ich das Verzeichnis aus und erstelle die JLabel:
Java:
pictures = dir.listFiles(new DateiFilter());
labels = new JLabel[pictures.length];
pane.setPreferredSize(new Dimension(100 * pictures.length, 100));
if(pictures != null) {
for(int i = 0; i < pictures.length; i++){
labels[i] = new JLabel();
labels[i].setIcon(imgPane.setImage(pictures[i]));
pane.add(labels[i]);
}
}
Hier wird dann das ImagIcon gesetzt und wieder zurück gegeben:
Java:
public Icon setImage(File pictures){
this.img = new ImageIcon(pictures.getAbsolutePath());
this.tmpIcon = new ImageIcon(pictures.getAbsolutePath());
if (tmpIcon != null){
if (tmpIcon.getIconWidth() > 90){
img = new ImageIcon(tmpIcon.getImage().getScaledInstance(90, -1, Image.SCALE_DEFAULT));
}
else
img = tmpIcon;
}
return img;
}
Nun zu meinen Problemen...
Wenn im Startverzeichnis mehr als 3 Bilder vorhanden sind, bekomme ich einen "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space Fehler. Die Anzeige funktioniert trotzdem! Wenn ich dann das Verzeichnis wechsle und exakt die selben Codezeilen mit dem Observer update abgearbeitet werden, tritt der "OutOfMemoryError" nicht bei über 200 Bildern auf?
Die nächste Frage wäre dann eben wie man eine große Anzahl von Bildern intelligent abarbeiten könnte, so dass einem lästige Wartezeiten erspart bleiben. Beispielsweise mit nem ViewPort oder Threads oder sowas?
Danke für die Hilfe
geneticZ