Normalerweise bestätigt der Java-Compiler, dass alle überprüften Ausnahmen, die ausgelöst werden, in der throw-Spezifikation enthalten sind. Gibt es etwas Spezielles, wenn eine native Funktion eine Java-checked-Exception auslöst, die nicht in der Funktionen-Spezifikationsliste enthalten ist, oder wird die throw-Spezifikationsliste zur Laufzeit einfach ignoriert?Java checked exception nicht in der throw-Spezifikation der Funktion?
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();
}
}
}
(Die C++ Funktionsnamen wahrscheinlich verstümmelt werden würde. Auch loadlibrary sollte in einem Try-Catch sein. Sie kümmern sich nicht, ich glaube nicht, dass es Es gibt möglicherweise andere Fehler im Code, aber sie sind wahrscheinlich auch nicht relevant.)
Ich bin irgendwie überrascht, das ist kein Duplikat. –