Previous | Next | Trail Map | Integrating Native Methods into Java Programs | ネイティブメソッドを実装する


ネイティブメソッドの中から例外割り込みをあげる

SignalError() 関数を使用すると、ネイティブメソッドの中から Java の例外割り込みをあげることができる。このページではその方法を説明する。

ネイティブメソッドで Java オブジェクトを使用する というタイトルのページのネイティブメソッドからの Java オブジェクトの呼び出し(in the
Integrating Native Methods into Java Programs trail) セクションで最初 に紹介した NativeExample クラスの例 に戻ってみる。

例外割り込みをあげる他のメソッドと同様に、ネイティブメソッドでもあげられる可能性のある例外割り込みを throws 節で宣言しなければならない。 NativeExample クラスの quote() ネイティブメソッドは、 IllegalArgumentException をあげる。

native static String quote(int index) throws IllegalArgumentException;

NativeExample クラスの quote() メソッドの実装は、SignalError() を使用して IllegalArgumentException 例外割り込みをあげる。

struct Hjava_lang_String *
NativeExample_quote(struct HNativeExample *unused, long index)
{
    char *quotation;

    if (index < 1 || index > 3) {
        SignalError(0, "java/lang/IllegalArgumentException",0);
        return NULL;
    }

    quotation = quotes[index - 1];
    return makeJavaString(quotation, strlen(quotation));
}

SignalError () への最初の引数は実行環境である。通常は、現在の環境を示す 0 を渡す。

2 番目の引数は、あげる例外割り込みの完全名である。装飾の多い例外割り込み名中のパッケージやクラス名を表す場合は、ピリオド('.') のかわりにスラッシュ('/') を使用する。3 番目の引数は、詳細メッセージを含む文字列である。 Java で例外割り込みを作成するようなことがあっても、このメッセージは例外コンストラクタに渡すメッセージと同じである。


Previous | Next | Trail Map | Integrating Native Methods into Java Programs | ネイティブメソッドを実装する