JNI FindClass не может найти класс, который использует jar

Я работаю над проектом, в котором некоторые функции Java должны вызываться из кода C ++ с использованием JNI. Я пробовал это с простым классом Java, но когда я начинаю использовать дополнительные .jar в моем проекте Java JNI’s 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>";

2

Решение

Я думаю, что ваша ошибка в том, что вы помещаете JAR в «library.path». Путь к библиотеке — это путь поиска нативных библиотек … а не файлов JAR.

Вы должны поместить файл JAR в путь к классам; например

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

(В Windows используйте «;» в качестве разделителя пути к классу вместо «:».)

8

Другие решения

Я выяснил, что было 2 проблемы

1) path_to_my_jar_file

Этот путь должен указывать на файл JAR, а не на папку, в которой он находится.

2) -Djava.library.path

Комментарии Дрю Макгоуэна и ответа Стивена С. были правильными — путь к файлу jar должен быть таким, как они сказали.

0

По вопросам рекламы [email protected]