Java JDialog关闭时内存泄漏

Java JDialog关闭时内存泄漏,java,swing,memory-leaks,jdialog,Java,Swing,Memory Leaks,Jdialog,我在一个Java应用程序上工作,该应用程序由一个常规窗口(JFrame)和一个由menuitem调用的JDialog组成(目前为止): public class MainWindow { private JFrame frame; public MyDialog dialog; /* ... */ private void initialize() { mnNew = new JMenuItem("New..."); mnNew

我在一个Java应用程序上工作,该应用程序由一个常规窗口(JFrame)和一个由menuitem调用的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);
    }
}

一切正常,但我的任务管理器报告说,每次我打开然后关闭MyDialog,程序都会消耗越来越多的内存。为什么?

将MyDialog实例化一次:

public class MainWindow {
   private JFrame frame;
   private final MyDialog dialog = new MyDialog();
删除MyDialog构造函数中的
setVisible(true)


要显示对话框,只需执行一次实例化MyDialog即可:

public class MainWindow {
   private JFrame frame;
   private final MyDialog dialog = new MyDialog();
删除MyDialog构造函数中的
setVisible(true)

要显示对话框,只需执行设置可见(true)

  • 原因是,

  • 只创建一次,通过
    getContentPane.removeAll重新使用

      • 原因是,

      • 只创建一次,通过
        getContentPane.removeAll重新使用


      非常感谢。但是在处理并将
      dialog
      变量设置为
      null
      之后,是否应该从内存中删除
      MyDialog
      ?不管怎样,它什么也没做。现在我在MainWindow构造函数中创建一次MyDialog,将其可见性设置为false。我在MainWindow中使用一个函数使其可见,在MyDialog中使用另一个函数使其不可见,但每当我关闭并重新打开对话框时,内存仍在泄漏。这只能通过使用静态变量实现,非常感谢。但是在处理并将
      dialog
      变量设置为
      null
      之后,是否应该从内存中删除
      MyDialog
      ?不管怎样,它什么也没做。现在我在MainWindow构造函数中创建一次MyDialog,将其可见性设置为false。我在MainWindow中使用一个函数使其可见,在MyDialog中使用另一个函数使其不可见,但每当我关闭并重新打开对话框时,内存仍在泄漏。这只有通过使用静态变量才能实现,