Hallo liebe Community!
Mein Problem ist, dass das Programm (welches ich momentan schreibe) bei einem Klick auf einen Button (JLabel) den Arbeitsspeicher Verbrauch erhöht und dass ohne Grenze nach oben.
Genaue Beschreibung:
Das Programm kann in eine bestimmte Ansicht (GraphicView) umgeschaltet werden. Hierbei lädt die Klasse GraphicView (extends JPanel) eine andere Klasse (Overview) in eine Variable. Die Klasse Overview erstellt ein paar JPanel und ein Scrollpanel und fügt diese der GraphicView hinzu.
Ein JLabel innerhalb dieser Overview reagiert auf einen Klick. Als Aktion des Klicks wird die Variable in der GraphicView, die die Overview enthält wieder = null gesetzt. Danach werden alle Componenten der GraphicView entfernt wonach die Variable wieder mit einer neu erzeugten Overview belegt wird. Also im Endeffekt beginnt das Ganze hier wieder von vorne und alles sollte wieder auf Anfang gesetzt sein. Ist es auch, bis auf den Arbeitsspeicher. Der steigt bei jedem Klick munter um ~15000 kb an (laut Windows TaskManager).
Ich finde den Fehler nicht. Vielleicht hat jemand von euch mehr Glück?
Hier die zwei besagten Klassen:
Mein Problem ist, dass das Programm (welches ich momentan schreibe) bei einem Klick auf einen Button (JLabel) den Arbeitsspeicher Verbrauch erhöht und dass ohne Grenze nach oben.
Genaue Beschreibung:
Das Programm kann in eine bestimmte Ansicht (GraphicView) umgeschaltet werden. Hierbei lädt die Klasse GraphicView (extends JPanel) eine andere Klasse (Overview) in eine Variable. Die Klasse Overview erstellt ein paar JPanel und ein Scrollpanel und fügt diese der GraphicView hinzu.
Ein JLabel innerhalb dieser Overview reagiert auf einen Klick. Als Aktion des Klicks wird die Variable in der GraphicView, die die Overview enthält wieder = null gesetzt. Danach werden alle Componenten der GraphicView entfernt wonach die Variable wieder mit einer neu erzeugten Overview belegt wird. Also im Endeffekt beginnt das Ganze hier wieder von vorne und alles sollte wieder auf Anfang gesetzt sein. Ist es auch, bis auf den Arbeitsspeicher. Der steigt bei jedem Klick munter um ~15000 kb an (laut Windows TaskManager).
Ich finde den Fehler nicht. Vielleicht hat jemand von euch mehr Glück?
Hier die zwei besagten Klassen:
Java:
package GraphicView;
import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import main.Main;
import account.Account;
import dorf.Dorf;
public class GraphicView extends JPanel {
private static final long serialVersionUID = -1308286533096559864L;
private Main main;
private int aktuellePage = -1, storageLevel = 1, farmLevel = 1;
private String servertime, wood = "", stone = "", iron = "", farmMax = "", farmNow = "", storageMax = "";
private Account account;
private Dorf dorf;
private Overview overview;
private String dorfname = "";
private String chords = "";
private Image topbar, bg_tile, statusbar_left, statusbar_right, village_icon, farm_icon, wood_icon, stone_icon, iron_icon, storage_icon, statusbar_seperator1,
content_top, content_bot, villageOV_bg, storage1, storage2, storage3, statusbar_center, content_inner_left, content_inner_right, content_inner_top,
content_inner_bot, content_inner_bg, content_mid, flow;
public GraphicView(Main main) {
this.main = main;
this.setLayout(null);
this.setSize(1000, 690);
loadImages();
}
public void loadGraphicView() {
if(aktuellePage != -1) loadPage(aktuellePage);
else loadPage(1);
}
private void loadImages() {
try {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("bg_tile.jpg");
bg_tile = ImageIO.read(input);
input = classLoader.getResourceAsStream("topbar.png");
topbar = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_top.png");
content_top = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_bot.png");
content_bot = ImageIO.read(input);
input = classLoader.getResourceAsStream("statusbar_left.png");
statusbar_left = ImageIO.read(input);
input = classLoader.getResourceAsStream("statusbar_right.png");
statusbar_right = ImageIO.read(input);
input = classLoader.getResourceAsStream("village_icon.png");
village_icon = ImageIO.read(input);
input = classLoader.getResourceAsStream("farm_icon.png");
farm_icon = ImageIO.read(input);
input = classLoader.getResourceAsStream("wood_icon.png");
wood_icon = ImageIO.read(input);
input = classLoader.getResourceAsStream("stone_icon.png");
stone_icon = ImageIO.read(input);
input = classLoader.getResourceAsStream("iron_icon.png");
iron_icon = ImageIO.read(input);
input = classLoader.getResourceAsStream("storage_icon.png");
storage_icon = ImageIO.read(input);
input = classLoader.getResourceAsStream("statusbar-separator1.png");
statusbar_seperator1 = ImageIO.read(input);
input = classLoader.getResourceAsStream("villageOV_bg.jpg");
villageOV_bg = ImageIO.read(input);
input = classLoader.getResourceAsStream("storage1.png");
storage1 = ImageIO.read(input);
input = classLoader.getResourceAsStream("storage2.png");
storage2 = ImageIO.read(input);
input = classLoader.getResourceAsStream("storage3.png");
storage3 = ImageIO.read(input);
input = classLoader.getResourceAsStream("statusbar_center.png");
statusbar_center = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_inner_left.png");
content_inner_left = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_inner_right.png");
content_inner_right = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_inner_top.png");
content_inner_top = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_inner_bot.png");
content_inner_bot = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_inner_bg.png");
content_inner_bg = ImageIO.read(input);
input = classLoader.getResourceAsStream("content_mid.png");
content_mid = ImageIO.read(input);
input = classLoader.getResourceAsStream("flow.png");
flow = ImageIO.read(input);
} catch (IOException e) {
main.getProblemHandler().doErrorLog(e);
}
}
public void loadPage(int id) {
deleteEverything();
switch (id) {
case 1:
overview = new Overview(main, this);
break;
}
}
private void deleteEverything() {
overview = null;
removeAll();
}
public void setAccount(Account account) {
this.account = account;
}
public void setDorf(Dorf dorf) {
if(this.dorf != null) this.dorf.setInGV(false);
this.dorf = dorf;
this.dorf.setInGV(true);
updateDorfInfos();
}
private void updateDorfInfos() {
dorfname = dorf.getName();
chords = "("+dorf.getKoordinaten().x+"|"+dorf.getKoordinaten().y+")";
if(main.getHauptframe().getView() == 1) loadGraphicView();
}
public void setServertime(String time) {
this.servertime = time;
if(overview != null) overview.setServertime(time);
}
public void updateValue(int id, int value) {
switch(id) {
case 1: wood = String.valueOf(value);
if(main.getHauptframe().getView() == 1) overview.updateValue(id, value);
break;
case 2: stone = String.valueOf(value);
if(main.getHauptframe().getView() == 1) overview.updateValue(id, value);
break;
case 3: iron = String.valueOf(value);
if(main.getHauptframe().getView() == 1) overview.updateValue(id, value);
break;
case 4: farmNow = String.valueOf(value);
if(main.getHauptframe().getView() == 1) overview.updateValue(id, value);
break;
case 5: storageMax = String.valueOf(value);
if(main.getHauptframe().getView() == 1) overview.updateValue(id, value);
break;
case 6: storageLevel = value;
if(main.getHauptframe().getView() == 1) loadGraphicView();
break;
case 7: farmMax = String.valueOf(value);
if(main.getHauptframe().getView() == 1) overview.updateValue(id, value);
break;
case 8: farmLevel = value;
if(main.getHauptframe().getView() == 1) loadGraphicView();
break;
}
}
public String getDorfname() {
return dorfname;
}
public String getChords() {
return chords;
}
public int getStorageLevel() {
return storageLevel;
}
public int getFarmLevel() {
return farmLevel;
}
public String getServertime() {
return servertime;
}
public String getWood() {
return wood;
}
public String getStone() {
return stone;
}
public String getIron() {
return iron;
}
public String getFarmMax() {
return farmMax;
}
public String getFarmNow() {
return farmNow;
}
public String getStorageMax() {
return storageMax;
}
public Image getTopbar() {
return topbar;
}
public Image getBg_tile() {
return bg_tile;
}
public Image getStatusbar_left() {
return statusbar_left;
}
public Image getStatusbar_right() {
return statusbar_right;
}
public Image getVillage_icon() {
return village_icon;
}
public Image getFarm_icon() {
return farm_icon;
}
public Image getWood_icon() {
return wood_icon;
}
public Image getStone_icon() {
return stone_icon;
}
public Image getIron_icon() {
return iron_icon;
}
public Image getStorage_icon() {
return storage_icon;
}
public Image getStatusbar_seperator1() {
return statusbar_seperator1;
}
public Image getContent_top() {
return content_top;
}
public Image getContent_bot() {
return content_bot;
}
public Image getVillageOV_bg() {
return villageOV_bg;
}
public Image getStorage1() {
return storage1;
}
public Image getStorage2() {
return storage2;
}
public Image getStorage3() {
return storage3;
}
public Image getStatusbar_center() {
return statusbar_center;
}
public Image getContent_inner_left() {
return content_inner_left;
}
public Image getContent_inner_right() {
return content_inner_right;
}
public Image getContent_inner_top() {
return content_inner_top;
}
public Image getContent_inner_bot() {
return content_inner_bot;
}
public Image getContent_inner_bg() {
return content_inner_bg;
}
public Image getContent_mid() {
return content_mid;
}
public Image getFlow() {
return flow;
}
}