0

Jasper Reports のコンパイラおよびエグゼキュータであり、レポート サーバー上のシェル スクリプトを介して呼び出される Java プログラムがあります。

依存関係の欠落に起因するバグを修正したばかりですが、何が問題なのかを理解するのに時間がかかりました。通常、コンパイル プロセスによって発生した問題はキャプチャされ、ログ ファイルに記録され、関係者に電子メールで送信されます。これは NoClassDefFoundError であったため、基本的にプログラムを終了し、ユーザーの観点からは黙って失敗しました。

このようなエラーをキャプチャして、メールで送信できるようにする方法はありますか? 実行中のシェル スクリプトを変更する権限があります。

4

2 に答える 2

0

エラーをキャッチすることができます

try {
        numericDefinition = new net.sf.cb2xml.def.BasicNumericDefinition(
                    binName, binarySizes, SynchronizeAt, usePositive, floatSynchronize, doubleSynchronize
            );
} catch (NoClassDefFoundError e) {
        System.out.println("Class Not Found: " + e.getMessage());
}

ただし、コーディングには細心の注意を払う必要があります。クラスの初期化時にNoClassDefFoundError がスローされて、try .. catch ブロックに進まないのは簡単です。

NoClassDefFoundErrorは、クラスが初めて参照されるときにスローされます。これは、存在しないクラスを参照するクラスを使用するクラスを使用するクラスをクラスが使用する場合に発生する可能性があります。

以下は、インポートが原因で、クラスの初期化時にNoClassDefFoundErrorで失敗する場合があります。

import net.sf.cb2xml.def.BasicNumericDefinition; // could cause the NoClassDefFoundError

     ...........
 try {
            numericDefinition = new BasicNumericDefinition(
                        binName, binarySizes, SynchronizeAt, usePositive, floatSynchronize, doubleSynchronize
                );
    } catch (NoClassDefFoundError e) {
            System.out.println("Class Not Found: " + e.getMessage());
    }
于 2012-05-15T07:11:48.157 に答える