我正在尝试在jthrowable中访问消息,同时处理在找不到类时生成的异常.但是,我无法在jthrowable对象上访问getMessage()的消息ID,我不知道为什么.我已经尝试将getMessage的签名更改为"()Ljava/lang/String"(最后没有分号,但这是必要的,对吧?)没有快乐.我对此很困惑.我甚至尝试用toString替换getMessage,但这不起作用.显然我在这里做了一些非常错误的事情.
这是我正在使用的代码:
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"的
公共类java.lang.Throwable extends java.lang.Object implements java.io.Serializable {
...
public java.lang.String getMessage();
签名:()Ljava/lang/String;
...
Chris R.. 8
好的,所以看起来我的问题是GetObjectClass
没有像你期望的那样在jthrowable上运行,或者至少它的结果对于获取方法没有用.用这个替换代码的那部分:
java_class = (*jEnv)->FindClass (jEnv, "java/lang/Throwable"); method = (*jEnv)->GetMethodID (jEnv, java_class, "getMessage", "()Ljava/lang/String;");
可怕的奇怪,那.不过,我希望这可以帮助别人.
好的,所以看起来我的问题是GetObjectClass
没有像你期望的那样在jthrowable上运行,或者至少它的结果对于获取方法没有用.用这个替换代码的那部分:
java_class = (*jEnv)->FindClass (jEnv, "java/lang/Throwable"); method = (*jEnv)->GetMethodID (jEnv, java_class, "getMessage", "()Ljava/lang/String;");
可怕的奇怪,那.不过,我希望这可以帮助别人.