我知道,这个问题经常出现在here之类的SO中:
但我想举一些非常具体的例子...我只是不确定我是否做对了。

我有一个JDialog,可以在其中键入一些值,选择一些复选框...等等...
我还在MyDialog中创建了一些Response对象,该对象代表MyDialog的“答案”。

在调用/创建JDialog的JFrame中:

MyDialog d = new MyDialog(this, ...);
d.showDialog();
// After MyDialog is closed (it's modal):
MyDialog.Response dialogResponse = d.getDialogResponse();
// Do something with response...

在对话框中(可以通过单击“保存”按钮关闭对话框):
btnSave.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        dialogResponse = prepareResponse(); // prepares response on the basis of some data introduced by a user; dialogResponse is called from JFrame after Dialog is closed
        setVisible(false);
        dispose();  // <-- Important
    }
});

我的问题是:
这个解决方案有效,我的意思是,MyDialog.Response dialogResponse = d.getDialogResponse();行返回正确的值,但是...
如果我使用dispose()关闭对话框,则所有对话框的资源都可以被垃圾回收(不必...很难预测,对吗?)。因此,以这种方式检索对话框的响应是否正确...也许在这种情况下,我应该只写setVisible(false);而不写dispose()

最佳答案

引用自Javadocs:



因此,您的回复将被保留。 dispose()所做的所有工作都是释放 native 屏幕资源,其他成员未标记为进行垃圾回收。

另外,如果您想更加确定,则可以在检索响应对象之后立即调用dispose()

10-07 13:34
查看更多