1

デスクトップアプリの場合、プログラムがクラッシュしたときにGUIでスタックトレースを確認すると便利です。System.errを独自のエラーハンドラーに置き換えてJavaでこれを実装しました。このハンドラーは、すべてのエラーメッセージをGUIコンポーネントとテキストファイルにリダイレクトします。

問題:かなりの数のライブラリ(Apache POIなど)は、クラッシュが発生したときにSystem.errに書き込むだけでなく、単純な警告メッセージも出力します。これにより、クラッシュウィンドウが不必要にポップアップします。だから私の質問は、(1)プログラムがクラッシュしたときにスタックトレースを表示し、(2)警告メッセージの場合には表示しない方法を知っている人はいますか?

[編集]私のGUIはSWTで書かれています。

4

2 に答える 2

2

独自の例外ハンドラーをインストールできます。Swingの1つのテクニックは、ここで説明されています:http: //ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/。Eric Burkeにも、このトピックに関するすばらしい記事があります。もう1つの一般的な手法はThread.setDefaultUncaughtExceptionHandler、を使用することです。これは、例外が原因でスレッドが停止したときに呼び出されます(最初の参照記事のコメントによると、Swingスレッドは停止しないため、キャッチされない例外ハンドラーの設定はSwingでは機能しませんが、Ericの記事ではこの手法を使用しています)。

例外ハンドラーは、標準の出力/エラーストリームを使用して他のコードを気にすることなく、エラーを表示したり、ログに記録したり、必要なことを実行したりできます。

于 2010-02-03T08:47:50.563 に答える
2

あなたは間違った角度から問題に取り組んでいると思います。System.errへの出力があるときだけでなく、例外があるときにダイアログをポップアップする必要があります。System.errは、ロギングユーティリティのようなものです。

チェックされたすべての例外については、コード内でケースバイケースで処理する必要があります。ダイアログをポップアップするか、ログに記録するか、無視します(ただし、その場合は、本当に安全であることを確認してください)

残りのチェックされていない例外をキャッチするには、次のようにします:http ://www.javaspecialists.eu/archive/Issue081.html 、それらを取得していることを確認します。

于 2010-02-03T08:51:25.580 に答える