gpt4 book ai didi

java - JNI FindClass 找不到使用 jar 的类

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:45 29 4
gpt4 key购买 nike

我正在开发一个项目,其中一些 Java 函数必须使用 JNI 从 C++ 代码中调用。我已经尝试使用一个简单的 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>";

最佳答案

我认为您的错误是您将 JAR 放在“library.path”上。库路径是查找 native 库的路径……不是 JAR 文件。

您应该将 JAR 文件放在类路径中;例如

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

(在 Windows 上,使用“;”作为类路径分隔符而不是“:”。)

关于java - JNI FindClass 找不到使用 jar 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17972438/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com