nab*_*yan 4 c++ java java-native-interface jvm
我正在开发一个项目,其中必须使用JNI从C++代码调用某些Java函数.我已经尝试过一个简单的Java类,但是当我开始.jar在我的Java项目中使用额外的时候,JNI的FindClass函数找不到我的类.我已经完成了一些研究,并了解了classpath如果它使用额外的库,则编译.java文件需要哪些,但在这种情况下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;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
更新:我也试过了
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>";
Run Code Online (Sandbox Code Playgroud)
    我认为你的错误是你在"library.path"上放了一个JAR.库路径是查找本机库的路径...而不是JAR文件.
您应该将JAR文件放在类路径上; 例如
    options[0].optionString = 
        "-Djava.class.path=<path_to_my_java_class>:<path_to_my_jar_file>";
Run Code Online (Sandbox Code Playgroud)
(在Windows上,使用";"作为类路径分隔符而不是":".)
我发现有两个问题
1) 我的 jar 文件路径
此路径必须指向 jar 文件,而不是指向包含该文件的目录文件夹。
2) -Djava.library.path
Drew McGowen 的评论和 Stephen C 的回答是正确的 - jar 文件的路径必须像他们所说的那样。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           7554 次  |  
        
|   最近记录:  |