我使用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