【发布时间】:2020-08-03 15:21:27
【问题描述】:
我是 C++ 和 jni 的新手。我需要将 java 异常作为作业返回,而不是 jint。我有一个返回 jobject 的方法。所以在尝试返回 ThrowNew 时出现编译错误:
JNIEXPORT jobject JNICALL Java_com_my_get(JNIEnv* env, jobject obj) {
some::SomeObject returnObject;
try {
//... trying to get returnObject by calling lib method
returnObject = some::lib::getSomeObject();
} catch (...) {
// report problem back to Java.
jclass Exception = env->FindClass("com/my/MyClientException");
return env->ThrowNew(Exception, "Error");
}
//... return returnObject mapped to jobject
}
java原生部分:
public native MyJavaObject get(); // need object or exception
编译错误:
错误:从 ‘jint’ {aka ‘int’} 到 ‘jobject’ {aka 的无效转换 ‘_jobject*’} [-fpermissive]
如何做到这一点?发生错误时我需要停止该方法。
【问题讨论】:
-
ThrowNew 返回一个
jint,但在你说的签名中,你返回一个jobject -
是的,我明白了。可能有一些方法会在 jobject 存在时返回 java 异常?
-
使用
Throw和NewObject