我一直在寻找这个问题,因为我想在某些时候一定会被问到,但这是我能找到的最接近的问题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
之间开始并导致某些问题,但是可能吗?
答案 0 :(得分:1)
不,只要您从示例中仅访问非图形对象(如字符串)。