ダイアログでsetVisible(false)を使用して後で再利用することは理にかなっていますか、毎回dispose()を呼び出して新しいJDialogを作成する方が安全ですか。 setVisible(false)によるメモリリークはどうですか?
編集:私の質問は、アプリケーションの終了についてはそれほどではありません。メインフレームを親として持ち、アプリケーションの存続期間中に開閉されるダイアログの詳細。例えば。私のアプリケーションに約10個のダイアログがあり、それらを開くたびに異なるデータを表示するとします。インスタンスを再利用してsetVisible()を使用するか、毎回新しいダイアログを作成して閉じるときにdispose()する必要があります。
dispose()
を使用してリソースを解放し、メモリを解放することをお勧めします。ダイアログを再度表示する場合は、setVisible(true)
を呼び出します。
Java仮想マシン(VM)内の最後の表示可能なウィンドウが破棄されると、VMが終了する場合があります。 詳細については、AWTスレッドの問題 。
between JDialog#dispose();
とJDialog.setVisible(false)
more here の違いはまだわかりません。それぞれが再利用のためにウェイクアップする可能性があり、次の場合は関係ありません/処分または可視化された
私の見解では、この質問は3つの別々の領域に分割する必要があります
1)一部のJFrame
はJDialog
またはJWindow
(_exist only is is there JFrame
_)の親であり、最後の1つはライトをオフにする必要があります
2) JDialog
の親なし
3)まだ別の_JFrame, JDialog or JWindow
_が存在し、最後にライトをオフにする必要があります
Window[] wins = Window.getWindows();
を使用して到達可能System.exit(0);
JFrame.EXIT_ON_CLOSE
_を使用して目に見えるJFrame
が存在する必要があるか、または別の方法でWindowsListener
をSystem.exit(0);
に実装するdispose()
を呼び出すと、ダイアログに関連付けられているリソースが解放されます。 dispose()
を実行した後も、ダイアログを保持できます。あまりにも多くのダイアログを配置することに不安がある場合は、 WeakReference
を使用して参照を保持します。これにより、ダイアログが使用するスペースが不要である限り、使用しているダイアログがガベージコレクションのみを生き残ることができます。