2

データを.dataファイルに保存するJavaアプリケーションを作成しました。データをファイルに保存するためのコードを起動するために、アプリケーションが閉じるのをリッスンするウィンドウリスナーがあります。私が持っている専用の終了ボタンを押すか、ウィンドウの赤い「X」を押すと、すべてが正常です。ただし、ユーザーがコマンド+ qルートを選択すると、事態は悪化します。アプリケーションは終了しますが、データは保存されません。これを修正するには、AppleのhandleQuit(Application Event e)メソッドを正しく実装するにはどうすればよいですか?

4

1 に答える 1

5

その場合に必要なのはシャットダウンフックです。シャットダウンフックは、OS信号をリッスンしてアプリを閉じ、この信号が送信されるとトリガーされます。シャットダウンフックは、ほとんどすべてのコードを実行できます。

組み込みの赤い「X」ボタンを配線して(ファイルを保存する代わりに)アプリを閉じることができます。シャットダウンフックがリクエストをキャッチし、ファイルの保存を処理します。

唯一の注意点は、シャットダウンフックは、実行にそれほど時間がかからないコードで構成されていることになっているということです。したがって、ファイルの保存には1〜2秒以上かかることはなく、ユーザーが認識するまでに無期限に時間がかかる可能性があるため、ユーザーがシャットダウンフックで確認する必要がある確認ダイアログボックスを使用しないでください。ダイアログ。

シャットダウンフックを短命にする必要がある理由は、アプリケーションがシャットダウンを要求された場合、OSは通常、妥当な時間内にアプリケーションがシャットダウンすることを期待しているためです。たとえばWindowsで表示されない場合、OSは「アプリケーションが応答していません...」というメッセージのいずれかを表示する可能性があります。

最後に、後でこの質問に遭遇するかもしれませんが、タスクマネージャーからの「強制終了」要求(またはOS Xの「強制終了アプリケーション」ダイアログ)をキャッチする方法を疑問に思うかもしれません。ええと、あなたはそれらを捕まえることができません、そしてあなたは試みるべきではありません![強制終了]メニューにアプリを表示するなどの機能を無効にすることは可能ですが、これは完全なハックであり、絶対に避ける必要があります。ユーザーや管理者が常に利用できるはずのオプションを回避しようとする方法でアプリを設計している場合、それはアプリの設計が不十分であるか、悪意のある人物であることを強く示しています。このように動作するアプリをインストールした場合を想像してみてください。プログラマーがアプリに殺せない品質を与えようとして怠惰であるか、悪意があると思いませんか?

また、強制終了は強制的な(不正な)シャットダウンであり、アプリケーションがハングしていて正常に終了しない場合にのみ使用する必要があります。OSは、ユーザーまたは管理者が暴走したアプリや応答しないアプリを強制終了できるように、強制終了のようなオプションを用意する必要があります。ユーザーがアプリを強制終了する場合、強制終了は望ましくないと誤解するか、アプリの設計に何かがあり、通常のアプリ終了よりも強制終了の方が有利になります。これが当てはまる場合(たとえば、ユーザーが何らかの理由で強制終了するという話を聞いた場合)、通常、アプリの一部がユーザーの期待に一致するように設計されていないことを示しています。

于 2012-09-08T17:15:57.597 に答える