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

时间:2014-03-27 14:07:36

标签: java swing dispose jdialog try-finally

我一直在寻找这个问题,因为我想在某些时候一定会被问到,但这是我能找到的最接近的问题Remove Top-Level Container on Runtime

我的问题是,如果在JDialog中完成dispose并且执行代码已完成,则在该对话框上调用dispose()之后,try中是否安全执行代码?在finally

这是一个展示我要问的例子:

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()进程和finally块,我会说它应该可以正常工作,如果不是一个好主意。确实运行上面的代码确实成功打印。

虽然GC可以从try / finally之间开始并导致某些问题,但是可能吗?

1 个答案:

答案 0 :(得分:1)

不,只要您从示例中仅访问非图形对象(如字符串)。