2012-04-18 8 views
0

私には動作しないコードがありますが(これは私にとっては一般的な出来事ですが)、私はエラーを受け取っていないので、悪いデータで実行し続けます。問題は、try/catchブロックでコードの一部をラップするように指示し続けていることです(私のテストは基本的なものですが、試しにメッセージを出力して出力されたら、すべてうまくいったと思います。よく私のコードで)。私は本番環境ではtry/catchステートメントを置くことでコードの実行を続けることができますが、コードのそのセクションのトラブルシューティングを試みているのでトラブルシューティングが難しくなります。実行可能ファイルにIOExceptionをスローする方法はありますか?

私は実際に試し領域内で何かが失敗したときに私は実際に見ることができますか?ここで

は、私のコードのサンプルです:

try { 
     ByteArrayInputStream baos_back = new ByteArrayInputStream(message); 
     ObjectInputStream oos_back = new ObjectInputStream(baos_back); 
     i = oos_back.readInt(); 
     d = oos_back.readDouble(); 
     list_of_ints = (int[]) oos_back.readObject(); 
     oos_back.reset(); 
     baos_back.reset(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

メソッドに 'throws'宣言を追加することで、例外を呼び出し関数に'スローすることができます。 – twain249

+1

私はあなたのコードをデバッガで実行し、例外を壊すことをお勧めします。 – birryree

+0

メソッドの一部ではありません。私のrun()メソッド(基本的には、サーバーへのチャンネルを開き、データを取得し、それを変換する)内にあります。 –

答えて

1

私は私のコメントで述べたように、あなたは毛布のcatchステートメントを使用してJavaですべての例外をキャッチすることができます

try { 
    // code 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

これはtryブロックでスローすべてのExceptionをキャッチし、キャッチしない唯一のものはErrorです。実際に

次のように、あなたはあなたができるので、例外チェーン、あなたがキャッチした例外の種類、およびキャッチより具体的な例外を制限することになるでしょう:

try { 
    // code 
} catch (IOException ioe) { 
    // we expected this 
    ioe.printStackTrace(); 
} catch (SomeOtherException soe) { // just an example... 
    soe.printStackTrace(); 
} catch (Exception e) { 
    // Did we expect this? Maybe not! 
    e.printStackTrace(); 
} 

以上も、それはあなたがいくつかを期待することが知られてます予想されなかったことを捕まえるかもしれない大きなブランケットキャッチオールステートメントがあります。

このコードが現在行っているように、標準出力に出力するのではなく、ファイルなどに例外を記録することもできます。基本的なロギングユーティリティはjava.util.loggingです。


私はまだデバッガを使用することを学ぶことをお勧めします。デバッガは、例外がスローされるたびにプログラムの実行を停止するなど、プログラムの実行中の任意の時点で変数やフィールドの値を検査することができるように、多くのことを行うことができます。 EclipseやNetbeans、IntelliJなどのIDEを使用している場合は、デバッガがあります。コマンドラインを使用する場合、jdbコマンドラインJavaデバッガがあります。

+0

ありがとう。私はデフするでしょう。デバッガを学ぶ(私はブレークポイント用にしか使用しないので、プロファイラを起動してメモリダンプを取得できますが、Eclipseの機能に焦点を当てます)。偉大な答えとプログラミングアドバイスありがとう。 –

+0

実際、あなたは私の心の中で質問を引き起こしました...統合されたデバッガは大丈夫ですか、それとももっと良いサードパーティのものがありますか? –

+0

@learningJava - IntelliJ/Eclipseに付属しているデバッガは、どれもかなり良いです.Javaのコードを書いて長年JSwatのような外部デバッガを使う必要はありませんでした。 [Eclipseでデバッグする](http://www.ibm.com/developerworks/library/os-ecbug/)のチュートリアルです。私が使用したサードパーティーの1つは、[Memory Analyzer Tool](http://www.eclipse.org/mat/)でした。Javaヒープダンプを調べて、8 GBのRAMを持つマシンが "OutOfMemoryError '。 – birryree

3

あなたは、このエラーが発生したときに爆破するようにプログラムを取得しようとしていますか?その場合は、IOExceptionRuntimeExceptionにラップし、その代わりにスローする必要があります。チェックされていないので、宣言する必要はなく、プログラムを正常に終了させるはずです。

+0

はい、私はエラーが発生したときにそれを爆破したいですか?私はあなたのリンクをチェックして、有望に見える.. –

1

コードに適切な例外をスローする場合は、try-catchブロックを使用しないことをお勧めします。 try-catchは、発生した例外を処理してからプログラムを実行し続けるために使用されますが、まったく処理しないように思えます。

try-catchブロックを使用する場合は、catchブロックの最後に手動でRuntimeExceptionをスローすることができます。 のような何か:

throw new IOException(); 
try { 
    // Some code... 
} catch(Exception e) { 
    // Error handling code... 
    throw new RuntimeException(e.getMessage()); 
} 
1

私はあなたがTODOリマインダ、標準出力にBARFを持っているこの

catch ($ExceptionClass e) 
{ 
    // TODO: Autogenerated catch block 
    e.printStackTrace(); 
    throw new RuntimeExcepton(e); 
} 

この方法を行うには、あなたのコード生成テンプレートを編集することをお勧めし、あなたが正しい例外を提供していない場合は、あなたのプログラムが爆破されることが保証されていますハンドラ。

関連する問題