例外の処理

例外によって、アプリケーションで発生したエラーを処理する方法を知ることができます。 Java™ には、例外の処理に関する明確で一貫性のある戦略がありますが、C/C++ コードにはありません。 したがって、Java JNI は、障害を検出しても例外をスローしません。 JNI はアプリケーションのネイティブ・コードが例外を処理する方法を知らないばかりか、処理できるかどうかさえも知りません。

JNI 仕様では、例外を据え置くことが義務付けられています。例外が発生したかどうかを検査するのは、ネイティブ・コードの役割です。 この目的のために、一連の JNI API が提供されています。 戻りコードのある JNI 関数は、例外が保留されている場合、必ずエラーを設定します。 JNI 関数が戻る場合は、例外をチェックする必要はありません。successただし、エラーの場合は例外を確認する必要があります。 確認しない場合は、次に JNI を実行したときに JNI コードによって保留中の例外が検出され、スローされます。 例外が後で、あるいはコード内の作成された場所とは異なる場所でスローされた場合、その例外をデバッグすることは困難になる場合があります。

注: JNI ExceptionCheck 関数は、 ExceptionOccurred 呼び出しでローカル参照を作成する必要があるため、 ExceptionOccurred 呼び出しよりも最適な例外検査方法です。