Я работаю над приложением Java, состоящим (еще) регулярного окно (JFrame) и JDialog Вызывается пунктом меню в первом:память утечка на JDialog закрытия
public class MainWindow {
private JFrame frame;
public MyDialog dialog;
/* ... */
private void initialize() {
mnNew = new JMenuItem("New...");
mnNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dialog = new MyDialog();
}
});
}
}
И MyDialog
определяется следующим образом :
public class MyDialog extends JDialog {
public MyDialog() {
/* ... */
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
MyDialog.this.dispatchEvent(new WindowEvent(MyDialog.this,
WindowEvent.WINDOW_CLOSING));
MainWindow.window.matchMaker = null;
}
});
/* ... */
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setVisible(true);
}
}
Все работает отлично, но мой Task Manager сообщает, что каждый раз, когда я открываю и затем закрыть MyDialog, программа потребляет все больше и больше памяти. Зачем?
Большое спасибо. Но не следует ли «MyDialog» удалять из памяти после удаления и устанавливать переменную 'dialog' в« null »? Во всяком случае, он ничего не делает. Теперь я создаю MyDialog один раз в конструкторе MainWindow, устанавливая его видимость на false. Я делаю его видимым с функцией внутри MainWindow и невидимым с другим - в MyDialog, но память все еще протекает всякий раз, когда я закрываю и снова открываю диалоговое окно. – Sventimir
это возможно только с использованием статических переменных, – mKorbel