2

我试过四处寻找这个问题,因为我想它一定是在某个时候被问过的,但这是我能找到的最接近的东西Remove Top-Level Container on Runtime

我的问题是,JDialog在调用dispose()该对话框之后,如果 dispose 在 a 中完成try并且执行代码在 a 中完成,在 a 中执行代码是否安全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并导致一些问题吗?

4

1 回答 1

1

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

于 2014-03-27T14:37:46.627 回答