Ich versuche, die Nachricht in einem jthrowable zugreifen, während die Übergabe einer Ausnahme erzeugt, wenn ich eine Klasse zu finden, nicht. Ich kann jedoch nicht auf die Nachrichten-ID von getMessage() auf dem jthrowable-Objekt zugreifen, und ich weiß nicht, warum. Ich habe versucht, die Signatur von getMessage in "()Ljava/lang/String" zu ändern (ohne das Semikolon am Ende, aber das ist doch notwendig, oder? Ich bin verdammt verwirrt darüber. Ich habe sogar versucht, getMessage durch toString zu ersetzen, und que hat nicht funktioniert. Offensichtlich mache ich hier etwas ganz banales falsch.
Hier ist der Code, den ich verwende:
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;
}
Die Ausgabe dieses Codes sieht (unter anderem) wie folgt aus:
Im Ernst, wie komme ich hierher?!
Ausnahme im Thread "main" java.lang.NoClassDefFoundError: com/planet/core360/docgen/Processor
javap -p -s java.lang.Throwable
gibt mir dies:
Kompiliert aus "Throwable.java"
public class java.lang.Throwable extends java.lang.Object implements java.io.Serializable{
...
public java.lang.String getMessage();
Unterschrift: ()Ljava/lang/String;
...