1

動作しないコードがいくつかありますが(これは私にとってよくあることです)、エラーが発生しないため、不正なデータで実行され続けます。私が思う問題は、コードの一部をtry / catchブロックでラップするように指示し続けることです(私のテストは基本的で、try領域にメッセージを出力するだけで、出力された場合はすべてうまくいったと思います。すべてがうまくいかないようです。私のコードでも)。本番環境では、try / catchステートメントを配置するとコードの実行を継続できますが、コードのそのセクションのトラブルシューティングを試みているため、トラブルシューティングが困難になります。

これを回避する方法はありますか?トライエリア内で何かが失敗したときに実際に確認できますか?

これが私のコードのサンプルです:

    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();
    }
4

4 に答える 4

4

このエラーが発生したときにプログラムを爆破させようとしていますか?IOExceptionもしそうなら、あなたはあなたをで包み、RuntimeException代わりにそれを投げることができるはずです。それらはチェックされていないので、それらを宣言する必要はなく、それはあなたのプログラムをうまく殺すはずです。

于 2012-04-18T01:13:12.803 に答える
2

コードで適切な例外をスローする場合は、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());
}
于 2012-04-18T01:20:41.617 に答える
1

コメントで述べたように、Javaのすべての例外を包括的catchステートメントでキャッチできます。

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

これにより、ブロックにExceptionスローされたすべてのものがキャッチされ、キャッチされないのはsだけです。tryError

実際には、キャッチする例外のタイプを制限し、より具体的な例外をキャッチする必要があるため、次のように例外チェーンを作成できます。

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デバッガーがあります。

于 2012-04-18T01:40:40.823 に答える
1

これを行うには、コード生成テンプレートを編集することをお勧めします

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

このようにして、TODOリマインダー、stdoutのバーフがあり、正しい例外ハンドラーを提供しない場合にプログラムが確実に爆発するようになります。

于 2012-04-18T01:42:52.820 に答える