1. ホーム
  2. java

[解決済み] Java Swingアプリケーションをコードから閉じる方法

2023-01-11 06:09:50

質問

Swingアプリケーションをコードから終了させる適切な方法と、その落とし穴は何でしょうか。

タイマーが鳴った後、自動的にアプリケーションを終了させようとしたことがあります。しかし、ただ dispose() を呼び出すだけでは JFrame ではうまくいきませんでした。ウィンドウは消えますが、アプリケーションは終了しませんでした。しかし、クローズボタンでウィンドウを閉じると、アプリケーションは終了します。どうすればよいのでしょうか?

どのように解決するのですか?

JFrameのデフォルトのクローズアクションは、"に設定することができます。 DISPOSE_ON_CLOSE の代わりに EXIT_ON_CLOSE を使用します (なぜ人々は EXIT_ON_CLOSE を使用し続けるのか、私には理解できません)。

処分されていないウィンドウや非デーモンスレッドがある場合、アプリケーションは終了しません。これはエラーと見なされるべきです (そして System.exit で解決するのは非常に悪い考えです)。

最も一般的な原因は、java.util.Timer とあなたが作成したカスタムスレッドです。両方ともデーモンに設定されるか、明示的に強制終了される必要があります。

すべてのアクティブなフレームをチェックしたいのであれば Frame.getFrames() . すべてのWindows/Frameが破棄されたら、デバッガを使用して、まだ実行中の非デーモンスレッドをチェックします。