2012-03-19 5 views
0

「によって発生する」:(テキストは、プロジェクトの情報を隠すために変更されている)Javaの例外が追加さ「:ヌル」私のログに次のように示されるいくつかの例外があります句

java.util.concurrent.ExecutionException:org.xxx.BBBException<br> 
&nbsp;&nbsp;at ....<br> 
&nbsp;&nbsp;...<br> 
Caused by: org.xxx.BBBException: null<br> 
&nbsp;&nbsp;at ....<br> 
&nbsp;&nbsp;...<br> 

なぜ「ヌルがあります"原因句では?

私たちによって作られたBBBExceptionはExceptionを拡張し、toString()をオーバーライドしません。 状況によっては、FutureTask.setException(新しいBBBException( "RPC timed out"))が呼び出され、BBBExceptionがログに記録されることが予想されます。 しかし、例外の詳細メッセージはプログラムで設定したものではなく、最初の行とCaused by句のテキストも一致しません(最初の行に ":null"はありません)。 これがどうして起こったのか誰かが気づいていますか?ありがとう!

環境:java 6、update 21、centos 64-bit、java 64-bit、mixed mode。

+0

私は問題が簡単だったと思います。 Throwableからコピーされたピースコードは次のとおりです。 public String toString() { String str1 = super.getClass().getName(); String str2 = getLocalizedMessage(); return ((str2 != null) ? str1 + ": " + str2 : str1); }です。 ":"のどちらかにメッセージが含まれていないか、または欠落しています。文字列 "null"をメッセージとして渡したり、return "" + fieldのようなものを持つtoString()をオーバーライドしない限りしかし、どちらも私たちがやったことではありません。 – user1279175

答えて

2

は、私はあなたがメッセージなしいずれか実際に作成した新しいBBBExceptionをした疑いがある、またはあなたのBBBException(String)コンストラクタは、スーパーコンストラクタにメッセージを渡しません(それはすべき、super(message)経由)。基本的にそれは言っている:これはメッセージなしの例外です。

正確にあなたのコードは表示されません。

1

org.xxx.BBBException: nullは、nullメッセージ(デフォルトのコンストラクタを使用)でスローされました。いくつかのメッセージ(それはそれをサポートしている場合)でそれを投げ:

throw new BBBException("Danger! High Voltage") 

これが機能しない場合、それはBBBException(String msg)コンストラクタが適切に作成されていないことを意味します。それは次のようなものでなければなりません:

BBBException(String msg) { 
    super(msg); 
} 
関連する問題