2013-04-07 1 views
2

Я работаю над приложением 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, программа потребляет все больше и больше памяти. Зачем?

ответ

2
+1

Большое спасибо. Но не следует ли «MyDialog» удалять из памяти после удаления и устанавливать переменную 'dialog' в« null »? Во всяком случае, он ничего не делает. Теперь я создаю MyDialog один раз в конструкторе MainWindow, устанавливая его видимость на false. Я делаю его видимым с функцией внутри MainWindow и невидимым с другим - в MyDialog, но память все еще протекает всякий раз, когда я закрываю и снова открываю диалоговое окно. – Sventimir

+0

это возможно только с использованием статических переменных, – mKorbel

2

MyDialog однажды создании экземпляра:

public class MainWindow { 
    private JFrame frame; 
    private final MyDialog dialog = new MyDialog(); 

удаляет в MyDialog конструктор setVisible(true).

Чтобы показать диалог вобще setVisible(true)

+0

+1 справа .. ..................... – mKorbel