Estoy tratando de acceder al mensaje en un jwrowable mientras entrego una excepción generada cuando no puedo encontrar una clase. Sin embargo, no puedo acceder al ID de mensaje de getMessage() en el objeto jthrowable, y no sé por qué. Intenté cambiar la firma de getMessage por "() Ljava/lang/String" (sin el punto y coma al final, pero eso es necesario, ¿no?) Sin alegría. Estoy confundido como el infierno sobre esto. Incluso traté de reemplazar getMessage por toString, y que no funcionó. Obviamente estoy haciendo algo trivialmente incorrecto aquí.¿Por qué mi código JNI no encuentra con éxito el método getMessage de jthrowable?
Aquí está el código que estoy usando:
jthrowable java_exception;
jclass java_class;
jmethodID method;
java_exception = (*jEnv)->ExceptionOccurred(jEnv);
assert (java_exception != NULL);
java_class = (*jEnv)->GetObjectClass (jEnv, java_exception);
assert (java_class != NULL);
method = (*jEnv)->GetMethodID (jEnv, java_class, "getMessage", "()Ljava/lang/String;");
if (method == NULL) {
printf ("Seriously, how do I get here?!\n");
(*jEnv)->ExceptionDescribe (jEnv);
return;
}
La salida de este código (entre otras cosas) tiene el siguiente aspecto:
Seriously, how do I get here?!
Exception in thread "main" java.lang.NoClassDefFoundError: com/planet/core360/docgen/Processor
javap -p -s java.lang.Throwable
me da esto:
Compiled from "Throwable.java"
public class java.lang.Throwable extends java.lang.Object implements java.io.Serializable{
...
public java.lang.String getMessage();
Signature:()Ljava/lang/String;
...
¡Me ayudó! :-) –
¿Es posible que GetObjectClass() no funcione cuando hay una excepción activa? Pruebe '(* env) -> ExceptionClear (env)' antes de llamar a GetObjectClass. – Qwertie