java – 为什么我的JNI代码没能成功找到jthrowable的getMessage方法?

前端之家收集整理的这篇文章主要介绍了java – 为什么我的JNI代码没能成功找到jthrowable的getMessage方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在jthrowable中访问消息,同时处理在找不到类时生成的异常.但是,我无法在jthrowable对象上访问getMessage()的消息ID,我不知道为什么.我已经尝试将getMessage的签名更改为“()L java / 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;
}

代码输出(以及其他内容)如下所示:

SerIoUsly,how do I get here?!
Exception in thread “main” java.lang.NoClassDefFoundError: com/planet/core360/docgen/Processor

javap -p -s java.lang.Throwable给了我这个:

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;

解决方法

好吧,看起来我的问题是GetObjectClass没有像你期望的那样在jthrowable上运行,或者至少它的结果对于获取方法没有用.用这个替换代码的那部分:
java_class = (*jEnv)->FindClass (jEnv,"java/lang/Throwable");
method = (*jEnv)->GetMethodID (jEnv,"()Ljava/lang/String;");

真是奇怪,那个.不过,我希望这有助于其他人.

原文链接:https://www.f2er.com/java/130083.html

猜你在找的Java相关文章