我试过四处寻找这个问题,因为我想它一定是在某个时候被问过的,但这是我能找到的最接近的东西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
并导致一些问题吗?