У нас есть класс в Java 7, и нам нужно загрузить его из нативного кода. Я уже использовал Java 6 с JNI, но Java 6 не может загрузить этот класс. Поэтому я установил новый JDK, изменил каталоги ссылок и ссылки в моем проекте VC и т. Д. Все было хорошо, пока я не захотел запустить jre7 из JNI:
JNI_CreateJavaVM принимает версию Java в vm_args.version параметр, но нет определения для более новой версии, чем 1.6.
JavaVMInitArgs vm_args;
...
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
vm_args.ignoreUnrecognized = 0;
int ret = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
призвание FindClass
для класса Java7, очевидно, производит UnsupportedClassVersionError.
Эта проблема: Как мне создать java7 JVM с JNI_CreateJavaVM
?
Для пользователей Mac я настоятельно рекомендую прочитать эту статью:
Как я могу переключиться между Java 7 и Java 6 на OS X 10.8.2?
https://superuser.com/questions/490425/how-do-i-switch-between-java-7-and-java-6-on-os-x-10-8-2
Я успешно скомпилировал и запустил пример JNI, в котором я вызываю некоторые статические методы из созданного мной класса Java. Я решил проблему, вызвав «java_home» следующим образом:
/ usr / libexec / java_home -v 1.6.0_45 —exec javac Sample.java
Проблема в переменной окружения пути, которая относится к jre6 до jre7.
На Visual C ++ -> Property Pages-> Debugging-> Environment я изменил на:
путь = C: \ Java \ jre7 \ Bin; C: \ Java \ jre7 \ Bin \ клиента;% путь%
Или непосредственно на: Мой компьютер-> Свойства-> Дополнительно-> Переменные среды