Bir sınıf bulamadığım zaman oluşturulan bir özel durumu teslim ederken iletiye jperowable erişmeye çalışıyorum. Ancak, jthrowable nesnesindeki getMessage() ileti kimliğine erişemiyorum ve nedenini bilmiyorum. GetMessage imzasını "() Ljava/lang/String" e (sonunda noktalı virgül olmadan, ama bu gerekli, doğru mu?) Değiştirmeyi denemedim. Bunun hakkında kafam karıştı. Hatta getMessage'ı toString ile değiştirmeyi denedim ve'un çalışmadığı . Açıkçası burada önemsiz bir şey yapıyorum. İşte JNI kodum neden jthrowable'ın getMessage yöntemini başarılı bir şekilde bulamıyor?
ben kullanıyorum kodu: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;
}
(diğer şeyler arasında) bu kodun çıktısı şu şekildedir:
: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;
...
Seriously, how do I get here?!
Exception in thread "main" java.lang.NoClassDefFoundError: com/planet/core360/docgen/Processor
javap -p -s java.lang.Throwable
Bu bana yardımcı oldu! :-) –
Bir istisna aktifken GetObjectClass() işlevi çalışmıyor mu? GetObjectClass çağırmadan önce '(* env) -> ExceptionClear (env)' yi deneyin. – Qwertie