Java 在try块中处理JDialog,然后在匹配的finally块中继续执行代码是否安全?

Java 在try块中处理JDialog,然后在匹配的finally块中继续执行代码是否安全?,java,swing,dispose,jdialog,try-finally,Java,Swing,Dispose,Jdialog,Try Finally,我试着四处寻找这个问题,因为我想一定有人问过这个问题,但这是我能找到的最接近的问题 我的问题是,在该对话框上调用dispose()后,如果在try中执行dispose,并且在中执行代码,那么在JDialog中执行代码是否安全 下面是一个例子来说明我的问题: import java.awt.EventQueue; import javax.swing.JDialog; public class DisposeTestDialog extends JDialog { private fin

我试着四处寻找这个问题,因为我想一定有人问过这个问题,但这是我能找到的最接近的问题

我的问题是,在该对话框上调用
dispose()
后,如果在
try
中执行dispose,并且在
中执行代码,那么在
JDialog
中执行代码是否安全

下面是一个例子来说明我的问题:

import java.awt.EventQueue;
import javax.swing.JDialog;

public class DisposeTestDialog extends JDialog {
    private final String somethingToPrint;

    public DisposeTestDialog(String somethingToPrint) {
        this.somethingToPrint = somethingToPrint;
    }

    public void showAndDispose() {
        setVisible(true);
        // Do something
        setVisible(false);
        try {
            dispose();
        }
        finally {
            System.out.println(somethingToPrint);
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                DisposeTestDialog dialog = new DisposeTestDialog("Can this be safely printed?");
                dialog.showAndDispose();
            }

        });
    }
}
从我所知道的
dispose()
过程和
最后
块来看,如果不是一个好主意的话,我会说它应该工作得很好。实际上,运行上述代码确实可以成功打印


GC是否可能从
try
/
finally
之间开始并导致一些问题?

否,只要您仅访问示例中的字符串等非图形对象

如果您需要类是持久的,不要扩展JDialog。使用JDialog。只有当您想覆盖其中一个组件方法时,才扩展Swing组件。@GilbertLeBlanc是的,这实际上仅适用于本例。我的实际用例有很大的不同。所以你是说只要我不做一些会访问对话框框架的事情,那么我就可以了?