Java Swing アプリケーションでは、JDialog や JFrame などの最上位のコンテナを削除するのが困難な場合があります。もう必要ありません。この問題は、メモリ リークやその他の問題を引き起こす可能性があります。
提供された Java コードは、実行時にトップレベルの JDialog ウィンドウを削除しようとしますが、無限ループが発生し、最終的には削除できません。窓を閉めてください。このコードでは、Window.getWindows() を使用してすべてのウィンドウを反復処理する while ループを使用しています。ループは JDialog を見つけると、setVisible(false)、dispose()、dispatchEvent(windowClosing) などのさまざまなメソッドを使用して JDialog を削除しようとします。ただし、これらの努力にもかかわらず、JDialog は存続し、ループが無期限に継続する原因となります。
提供されたコードは、JFrame ウィンドウの影響を考慮していないため、JDialog を完全に削除できません。 JDialog が破棄された後も残ります。 JFrame は、イベント キューの存在を永続化するトップレベルのコンテナになります。すべてのトップレベルのコンテナが閉じられている場合にのみ、イベント キューを適切に終了できます。
この問題に対処するために、ソリューションでは JFrame インスタンスの存在を考慮してコードが強化されています。変更されたコードは、Window.getWindows() を使用してすべてのウィンドウを再度反復処理し、JFrame コンポーネントを識別します。 JFrame が検出された場合、コードはそれを可視に設定し、ループ カウンターをインクリメントします。ループ カウンタが特定のしきい値を超え、試行が複数回失敗したことを示す場合、コードは無限ループを防ぐためにアプリケーションを終了します。
以上がメモリリークを避けるためにJava Swingでトップレベルコンテナ(JDialog、JFrame)を適切に削除する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。