Обычно компилятор Java подтверждает, что все проверенные исключения, которые выбрасываются, находятся в спецификации throw. Делает ли что-нибудь особенное, когда родная функция выбрасывает исключение с проверкой java, которое не было в списке спецификаций throw throw, или же список спецификаций throw просто игнорируется во время выполнения?
C++
void function(JNIEnv * env, jclass jc) {
jclass newExcCls = env->FindClass("java/lang/NullPointerException");
env->ThrowNew(newExcCls, "ERROR");
}
Java
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();
}
}
}
(Название функции С++, вероятно, будет искажено. Также loadLibrary должен быть в try catch. Не волнует, я не считаю, что это относится к проблеме. Возможно, в коде есть другие ошибки, но они вероятно, не имеет значения.)