Normalmente, el compilador de Java confirma que todas las excepciones marcadas que se lanzan están en la especificación throw. ¿Hay algo especial que ocurra cuando una función nativa arroja una excepción java checked que no estaba en la lista de especificación de lanzamiento de funciones, o la lista de especificaciones de tiro simplemente se ignora en el tiempo de ejecución?¿Excepción marcada Java no en la especificación de lanzamiento de la función?
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();
}
}
}
(La ++ nombre de función C probablemente sería destrozado. También loadLibrary debe estar en un intento de captura. No importa, no creo que es relevante para el problema. Posiblemente haya otros errores en el código, pero probablemente tampoco sean relevantes).
Estoy un poco sorprendido de que este no sea un duplicado. –