Hallo,
dieser Post bezieht sich ein Stück weit auf diesen Beitrag Auf beendingung des Formular warten
Das im Thema genannte Problem habe ich gelöst. Es werden nun alle Formulare nach einander angezeigt! Bisher habe ich diese Stapelverarbeitung im kleinen getestet habe gerade einen Test mit 145 Einträgen gestartet!
Hier nochmal der Code der die Fomulare anzeigt und am ender wieder zerstört!
Am Ende der verarbeitung werden die Formulare mit
"zerstört". Leider bleiben daten aus der Verarbeitung im Speicher und werden nicht vom GarbageCollectior vernichtet. Bei jeder Stapelverarbeitung wächst der Platz, der vom Programm im Arbeitsspeicher belegt wird um etwa 160.000 Kb, so dass nach wenigen einträgen 1,2 GB belegt sind.
in dem Formular werden unter anderem Bilder angezeigt. Dies geschieht in diesem Code Teil.
Die URLs stammen aus einem XML-Dokument das zu beginn im Formular eingelesen wird. Die Anzahl der Bilder die geladen werden sind von Eintrag zu Eintrag unterschiedlich (können schon mal 20 bilder sein). Und der wachsende Arbeitspeicher gängt im wesentlichen von der Bilderanzahl ab (soviel konnt ich herausfinden). Das Problem ist das die Bilder (sowie ich das sehe) nach beendigung des Formulars im Arbeitsspeicher bleiben.
Leider weis ich nicht warum. Müsste der GarbageCollector nicht merken das sie nicht mehr benötigt werden und den Platz wieder freigeben? Oder Übersehe ich hier etwas.
Danke im vorraus!
GRuß
dieser Post bezieht sich ein Stück weit auf diesen Beitrag Auf beendingung des Formular warten
Das im Thema genannte Problem habe ich gelöst. Es werden nun alle Formulare nach einander angezeigt! Bisher habe ich diese Stapelverarbeitung im kleinen getestet habe gerade einen Test mit 145 Einträgen gestartet!
Hier nochmal der Code der die Fomulare anzeigt und am ender wieder zerstört!
Java:
public class OpenDialogSwingWorker extends SwingWorker<Void, Void>{
FileAnalysis f = null;
int i;
public OpenDialogSwingWorker(FileAnalysis f, int i){
this.f = f;
this.i = i;
}
@Override
public Void doInBackground() throws Exception {
StringTokenizer t = new StringTokenizer(f.filenames.get(i), "[].", false);
String quality = t.nextToken();
String title = t.nextToken();
title = title.substring(1);
MovieDataForm mdf = new MovieDataForm(f, "Daten hinzufügen");
MovieSearch ms = new MovieSearch(mdf);
ms.searchPanel.searchField.setText(title);
ms.searchPanel.searchButton.doClick();
mdf.tabPane.fileInfoPanel.qualityCombo.setSelectedItem(quality);
mdf.tabPane.fileInfoPanel.locationCombo.setSelectedItem(f.locationBox.getSelectedItem());
mdf.tabPane.fileInfoPanel.sizeField.setText(f.size.get(i));
mdf.tabPane.setSelectedComponent(mdf.tabPane.picturePanel);
return null;
}
}
Am Ende der verarbeitung werden die Formulare mit
Code:
dispose();
in dem Formular werden unter anderem Bilder angezeigt. Dies geschieht in diesem Code Teil.
Java:
pictureBox = new JRadioButton[cleanPictures.length];
pictureLabel = new JLabel[cleanPictures.length];
ImageIcon[] img = new ImageIcon[cleanPictures.length];
for(int i = 0; i < cleanPictures.length; i++){
img[i] = new ImageIcon(new URL(cleanPictures[i][1]));
img[i].setImage(img[i].getImage().getScaledInstance(140, 210, Image.SCALE_DEFAULT));
pictureLabel[i] = new JLabel(img[i]);
pictureLabel[i].setSize(140, 210);
pictureBox[i] = new JRadioButton();
pictureBox[i].setSize(20, 20);
pictureBg.add(pictureBox[i]);
pictureListPanel.add(pictureLabel[i]);
pictureListPanel.add(pictureBox[i]);
}
}
Die URLs stammen aus einem XML-Dokument das zu beginn im Formular eingelesen wird. Die Anzahl der Bilder die geladen werden sind von Eintrag zu Eintrag unterschiedlich (können schon mal 20 bilder sein). Und der wachsende Arbeitspeicher gängt im wesentlichen von der Bilderanzahl ab (soviel konnt ich herausfinden). Das Problem ist das die Bilder (sowie ich das sehe) nach beendigung des Formulars im Arbeitsspeicher bleiben.
Leider weis ich nicht warum. Müsste der GarbageCollector nicht merken das sie nicht mehr benötigt werden und den Platz wieder freigeben? Oder Übersehe ich hier etwas.
Danke im vorraus!
GRuß