我試過四處尋找這個問題,因爲我想它一定是在某個時候被問到的,但這是我能找到的最接近的東西Remove Top-Level Container on Runtime。在try塊中放置JDialog是否安全,然後繼續在匹配的finally塊中執行代碼?
我的問題是,它是安全的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
塊,我會說,如果不是一個好主意,應該很好地工作。確實運行上面的代碼確實成功打印。
雖然GC可能會在try
/finally
之間開始並導致一些問題嗎?
如果您需要讓您的課程保持持久性,請不要擴展JDialog。使用一個JDialog。當你想重載某個組件方法時,只擴展一個Swing組件。 –
@GilbertLeBlanc是的,這是真的只爲這個例子。我的實際用例大不相同。 –