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是的,这实际上仅适用于本例。我的实际用例有很大的不同。所以你是说只要我不做一些会访问对话框框架的事情,那么我就可以了?