Очень надеюсь, что вы можете помочь.Я создал приложение для управления запасами с помощью инфраструктуры Java Swing.Это приложение имеет 1 абстрактный класс с именем GUIRules, который расширяет JPanel, реализует actionListener, и 8 различных классов, которые расширяют GUIRules для представления каждого экрана.
public abstract class GUIRules extends JPanel implements ActionListener{}
public class login extends GUIRules {}
Дело в том, что все эти 8 классов имеют много общего;поэтому я решил предоставить каждому из них функциональность по умолчанию.
При переходе к каждому экрану все загружается нормально;Тем не менее, я в конечном итоге сталкиваюсь с ошибкой памяти кучи Java.Это метод, который позволяет менять экран:
/**
* When switching between GUI screens, declare new GUI within parameters
* @param panel
*/
public void changePanel(JPanel panel){
this.removeAll();
this.add(panel);
validate();
setVisible(true);
}
this.removeAll () должен удалить все компоненты, освобождая тем самым память.Все слушатели действий добавляются в конструкторы всех 8 экранов;так что это также должно быть устранено при вызове этой функции.
Это приложение также использует изображения.
Абстрактный класс (GUIrules) вызывает paintComponent () для загрузки фонового изображения:
/**
* Paint background, menu and logo images onto this class.
*/
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(image.mainImg, 0, 0,getWidth(),getHeight(),null);
g.drawImage(image.menuImg, 0, 30, getWidth(), 80, null);
g.drawImage(image.logoImg, 0, 33, null); g.setColor(Color.CYAN);
g.drawString(SystemSession.user, 10, 20);
g.drawString(SystemSession.status, 10, getHeight()-10);
repaint();
}
Я использовал Runtime.gc () для сбора мусора неиспользуемых объектов, но особой разницы нет.Есть идеи?Большое спасибо.