内存泄漏JDialog关闭

时间:2013-04-07 13:56:13

标签: java swing memory-leaks jdialog

我在一个Java应用程序上工作,该应用程序包含一个常规Window(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时,程序会消耗越来越多的内存。为什么呢?

2 个答案:

答案 0 :(得分:2)

Instanciate MyDialog一次:

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

在MyDialog构造函数中删除setVisible(true)

要显示对话框,请执行setVisible( true )

答案 1 :(得分:2)