2

ある時点で尋ねられたに違いないと思うので、この質問を探してみましたが、これは私が見つけることができる最も近いものでしたRemove Top-Level Container on Runtime

私の質問は、破棄が で行われ、実行コードが で行われた場合、そのダイアログJDialogを呼び出した後、 でコードを実行しても安全ですか?dispose()tryfinally

私が求めていることを示す例を次に示します。

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、素晴らしいアイデアではないにしても、うまくいくはずだと思います。実際、上記のコードを実行すると、正常に印刷されます。

try/の間で GC が開始され、finally何らかの問題が発生する可能性はありますか?

4

1 に答える 1