実際にはScalaで書かれたが、ソリューションがGroovy、Clojure、または純粋なJavaの場合とほぼ同じになると思う傾向がある)私のコンソールプログラムは、Ctrl + C(または、システムのシャットダウンシーケンスによって、プログラムに違いがあるかどうかわかりません)、アプリケーションが変更する外部リソース(データベース、ファイル、Webサービス抽象化リソース)予測可能で非論理的に壊れた状態になっていますか?JVMコンソールアプリケーションで^ Cを処理する方法は?
5
A
答えて
7
Runtime.addShutdownHookをご覧ください。
あなたは、通常のようにそれを使用します。
Runtime.addShutdownHook(new Thread() {
public void run() {
// do your clean up here.
}
});
3
この信号をトラップしてリソースを閉じることができます。ほとんどのサービスは正常に終了する必要はありませんが、通常は書き込むファイルは閉じます。
シャットダウンフックを追加するだけで、必要なのは可能です。しかし、私はあなたの状況のためにこれをテストします。
10
は、あなたが他の人が指摘したようにシャットダウンフックを実装しようとしてもできます。仮想マシンが中断することがまれに
、つまり、 をきれいにシャットダウンすることなく停止してください。これは仮想マシン が外部で終了した場合に発生します。たとえば、UnixではSIGKILLシグナル 、Microsoft WindowsではTerminateProcessコールです。たとえば、 が内部データ構造を破壊したり、存在しないメモリ にアクセスしようとすると、ネイティブメソッドが異常終了した場合でも、仮想マシン が中断することがあります。仮想マシンが異常終了した場合、シャットダウンフックが実行されるかどうかに関して、保証はありません。
私はあなたのアプリケーションにトランザクションのコンテキストを導入する必要があると思います。あなたが見ることができるファイルシステムのための非常に簡単なデータベースについては、Apache Commons Transaction
関連する問題
- 1. JVMがネイティブコードを処理する方法
- 2. コンソールアプリケーションでのエラー処理
- 3. C#でコンソールアプリケーションを展開する方法
- 4. C#ダイナミックフォントサイジングを処理する方法
- 5. コンソールアプリケーションにデータを渡して出力を処理する方法は?
- 6. コンソールアプリケーションのSystem.Xmlのエラー処理
- 7. SWIGはC#でutf8文字列を処理する方法は?
- 8. Visual C++コンソールアプリケーションでControl-C例外をキャッチする方法は?
- 9. Cで処理時間を収集する方法は?
- 10. C# - ListView:listViewItemでマウスクリックイベントを処理する方法は?
- 11. C#でOverflowExceptionを処理する方法は?
- 12. Cで未処理の例外をキャッチする方法は?
- 13. Objective cのTableviewCellでUIButtonを処理する方法は?
- 14. C++でユニコード文字を反復処理する方法は?
- 15. サイズが1,000,000,000の配列をC++で処理する方法は?
- 16. カスタムJVMでのRMI /例外処理
- 17. LuaでのLuaの処理方法C
- 18. C#は、コンソールアプリケーションのスクロール位置を設定する方法です
- 19. C#コンソールアプリケーションでユーザー入力を追跡する方法は?
- 20. Javaアノテーション処理 - すでに処理されたコードを処理する方法?
- 21. 1つのJVMで複数のプロセスを処理する
- 22. 処理中にコントロールの更新を処理する方法は?
- 23. セレン - イベントリスナー(C#)でポップアップを処理する方法
- 24. C#でGsonオブジェクトを処理する方法
- 25. Cで複数の動的フォームを処理する方法#
- 26. Cでバルクメールを処理する最良の方法
- 27. CでAPIリクエストを処理する方法#
- 28. C#でトランザクションを処理する一般的な方法
- 29. Windows C++でイベントを処理する方法
- 30. C#でInifinite Loopを処理する方法
+1また、ブラックアウトとシステムクラッシュからプログラムを保護する唯一の方法。 – josefx