我使用JNI Invocation API编码了一些东西。一个C程序启动一个JVM并调用它。 JNIenv指针对于C文件是全局的。我有许多C函数需要对给定的工作类执行相同的操作。所以我编写了helper函数,它接受jobject并处理它,返回所需的数据(一个C数据类型,例如一个int状态值)。编写C帮助函数并将作业作为参数传递给它们是否安全?在JNI Invocation API中工作时安全地将对象传递给C函数?
即(一个简单的例子 - 用来说明问题):
int getStatusValue(jobject jStatus)
{
return (*jenv)->CallIntMethod(jenv,jStatus,statusMethod);
}
int function1()
{
int status;
jobject aObj = (*jenv)->NewObject
(jenv,
aDefinedClass,
aDefinedCtor);
jobject j = (*jenv)->CallObjectMethod
(jenv,
aObj,
aDefinedObjGetMethod)
status = getStatusValue(j);
(*jenv)->DeleteLocalRef(jenv,aObj);
(*jenv)->DeleteLocalRef(jenv,j);
return status;
}
感谢。
我使用JNI调用API从C的逻辑流程是这样的: 0.启动了JVM中C. 1.从C调用到Java 2.手柄结果从Java返回。 3.发布本地参考。 4.关闭JVM。 步骤1-3可能会在JVM启动和关闭之间发生N次。我做了一些测试,看起来没问题。这些文档让我担心传递这些本地引用...... – bubbadoughball 2010-04-30 04:59:55