JNI FindClass 找不到使用 jar 的类
JNI FindClass can't find class which uses jar
我正在做一个项目,其中必须使用 JNI 从C++代码调用一些 Java 函数。我已经用一个简单的Java类尝试过,但是当我开始在我的Java项目中使用额外的.jar
时,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;
有什么想法吗?
更新:我也试过
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文件的路径必须像他们所说的那样。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- std::具有相同基类的类的变体
- 命名空间中具有.h和.cpp文件的类
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 如何从具有移动语义的类对象中生成共享指针
- 如何将参数传递给正在使用模板的类
- 如何制作一个将函数作为参数的类方法
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板化的类和友元函数
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 如何在C++中获取该对象的类声明中对象的地址?
- 在std::vector上存储带有模板的类实例
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 为什么C++编译器没有检测到正确声明的类?
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 注入 jar 并替换正在运行的 JVM 中的类
- 在运行时从 jar 文件加载的类上的 FindClass
- JNI FindClass 找不到使用 jar 的类