PC がシャットダウンされていることを Swing アプリから検出するにはどうすればよいですか?
-
09-06-2019 - |
質問
適切に動作する Windows プログラムでは、ユーザーが PC をシャットダウンするときに作業内容を保存できるようにする必要があります。
アプリにシャットダウン イベントを検出させるにはどうすればよいですか?どの解決策でも、ユーザーが「キャンセル」を選択した場合にシャットダウンを中止できるようにする必要があります。
通常の Swing ウィンドウの閉じフックは機能せず、シャットダウン フックの追加も機能しません。
テストでは、WindowListener のメソッド (windowClosing、windowClosed など) は呼び出されません。
私が受け入れた答えには、プラットフォーム固有のコード ( WM_QUERYENDSESSION に登録するための JNI) の使用が必要です。これはSwingのバグではないでしょうか?
見る http://forums.sun.com/thread.jspa?threadID=481807&messageID=2246870
解決
WM_QUERYENDSESSION メッセージに JNI コードを書き込みます。詳細については、MSDN ドキュメントを参照するか、Google で検索してください。
これを行うためにあまり多くの C++ コードを書きたくない場合は、JNA ライブラリをお勧めします。 ここをクリック. 。これにより、C コードに優れた Java 抽象化が提供されます。
他のヒント
Windows で Java アプリケーションをうまくシャットダウンするにはどうすればよいですか
それは役に立つかもしれない
上記の方が良い答えのようです。
ウィンドウのシャットダウン イベントの検出に関する良い情報が見つかりません。考えられる最善の方法は、ウィンドウを閉じるイベントなどを使用して、アプリケーションが閉じようとしている天気を検出してから質問することだと思います。
Java でのシグナル処理を探してください。Windows が終了すると、アプリケーションに信号が送信され、おそらく sigterm を終了するよう要求されます。
見る ここ 詳細については、こちらをご覧ください (私はウェブサイトの所有者ではありません)