簡體   English   中英

JNI FindClass找不到使用jar的類

[英]JNI FindClass can't find class which uses jar

我正在開發一個項目,其中必須使用JNI從C ++代碼調用某些Java函數。 我試過一個簡單的Java類,但是當我開始在我的Java項目中使用額外的.jar ,JNI的FindClass函數找不到我的類。 我做了一些研究並閱讀了關於編譯.java文件所需的classpath ,如果它使用額外的libs,但在這種情況下FindClass返回null 這是我的代碼的基本結構

JavaVMOption options[2];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean not;

options[0].optionString = "-Djava.class.path=<path_to_my_java_class>";
options[1].optionString = "-Djava.library.path=<path_to_my_jar_file>";
memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);

if (status != JNI_ERR)
{
    cls = env->FindClass("package/ClassName"); //returns null while using jar
    if(cls != 0)
    {   
        //do some stuff
    }
    jvm->DestroyJavaVM();
    return 0;
}
else
    return -1;

有任何想法嗎?

更新:我也試過了

options[0].optionString = "-Djava.class.path=<path_to_my_java_class>;<path_to_jar>";

    options[0].optionString = "-Djava.class.path=<path_to_my_java_class>";
    options[1].optionString = "-classpath <path_to_jar>";

我認為你的錯誤是你在“library.path”上放了一個JAR。 庫路徑是查找本機庫的路徑...而不是JAR文件。

您應該將JAR文件放在類路徑上; 例如

    options[0].optionString = 
        "-Djava.class.path=<path_to_my_java_class>:<path_to_my_jar_file>";

(在Windows上,使用“;”作為類路徑分隔符而不是“:”。)

我發現,有2個問題

1)path_to_my_jar_file

此路徑必須指向jar文件,而不是指向包含它的目錄文件夾。

2)-Djava.library.path

Drew McGowen的評論和Stephen C的答案是正確的 - jar文件的路徑必須像他們所說的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM