Normalmente, il compilatore Java conferma che tutte le eccezioni controllate che vengono lanciate sono nella specifica throw. Succede qualcosa di speciale quando una funzione nativa lancia un'eccezione controllata di java che non era presente nell'elenco delle funzioni, oppure l'elenco delle specifiche di lancio semplicemente ignorato in fase di runtime?Java ha controllato l'eccezione non nella specifica della funzione?
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();
}
}
}
(Il nome della funzione C++ sarebbe probabilmente alterati. Inoltre loadLibrary dovrebbe essere in un tentativo di cattura. Non importa, non credo che sia Potrebbero esserci altri errori nel codice, ma probabilmente non sono rilevanti.)
Sono un po 'sorpreso, questo non è un duplicato. –