Java JDialog关闭时内存泄漏
我在一个Java应用程序上工作,该应用程序由一个常规窗口(JFrame)和一个由menuitem调用的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
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中使用另一个函数使其不可见,但每当我关闭并重新打开对话框时,内存仍在泄漏。这只有通过使用静态变量才能实现,