クラスが見つからない場合に生成される例外を処理しながら、jthrowableでメッセージにアクセスしようとしています。しかし、jthrowableオブジェクトのgetMessage()のメッセージIDにアクセスできず、その理由がわかりません。getMessageの署名を「()Ljava / lang / String」に変更してみました(最後にセミコロンはありませんが、それは必要ですよね?)。私はこれについて地獄と混同しています。getMessageをtoStringに置き換えようとしましたが、うまくいきませんでした。明らかに、私はここで些細なことをしている。
これが私が使用しているコードです:
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;
}
このコードの出力は(とりわけ)次のようになります。
真剣に、どうやってここに着くの?
スレッド「main」の例外java.lang.NoClassDefFoundError:com / planet / core360 / docgen / Processor
javap -p -s java.lang.Throwable
私にこれを与えます:
「Throwable.java」からコンパイルされた
publicclassjava.lang.Throwable extends java.lang.Objectimplements java.io.Serializable {
...
public java.lang.String getMessage();
署名:()Ljava / lang / String;
..。