我试着四处搜索这个问题,我想它一定是在某个时候被问到的,但这是我能找到的最接近的问题 Remove Top-Level Container on Runtime .
我的问题是,在 JDialog
中调用 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
block 的了解,我认为它应该可以正常工作,即使不是一个好主意。确实运行上面的代码确实成功打印。
GC 是否可能在 try
/finally
之间开始并导致一些问题?
最佳答案
不,就您仅访问非图形对象(例如示例中的字符串)而言。
关于java - 在 try block 中放置 JDialog,然后在匹配的 finally block 中继续执行代码是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22690094/