通常、Java コンパイラは、スローされるすべてのチェック例外がスロー仕様に含まれていることを確認します。ネイティブ関数が、関数のスロー仕様リストにない Java チェック済み例外をスローすると、何か特別なことが起こりますか? または、実行時にスロー仕様リストが単純に無視されますか?
C++
void function(JNIEnv * env, jclass jc) {
jclass newExcCls = env->FindClass("java/lang/NullPointerException");
env->ThrowNew(newExcCls, "ERROR");
}
ジャワ
public class Tester {
static {
System.loadLibrary( "MyLibrary" );
}
private static native void function();
public static void main(String [ ] args) {
try {
function();
} catch( Exception e ) { //is it caught? Or what happens?
e.printStackTrace();
}
}
}
(C++ 関数名はおそらくマングルされます。また、loadLibrary は try キャッチに含まれている必要があります。気にしないでください。問題に関連しているとは思いません。コードに他のエラーがある可能性がありますが、おそらく関連性はありませんまた。)