[英]Fail to find class after creating a JVM from C++ application via JNI
使用JNI我正在嘗試從C ++項目創建Java類的實例,但它失敗了。 我用一個簡單的Java類測試了相同的代碼,它的工作原理。 不同之處在於我的實際類路徑是一個包含一堆jar的目錄。 我需要實例化CmaesClient
的類屬於其中一個jar。
這是C ++代碼:
JavaVM* jvm = NULL;
JNIEnv *env = NULL;
JavaVMInitArgs vm_args;
JavaVMOption* options = new JavaVMOption[1];
options[0].optionString = "-Djava.class.path=/home/azg/code/hpcmom/target/1.1.9-SNAPSHOT/hpcmom-cmaes";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
JNI_CreateJavaVM(&jvm, (void**) &env, &vm_args);
if (jvm == NULL) {
std::cout << "Failed creating JVM" << std::endl;
} else {
std::cout << "Succeeded creating JVM" << std::endl;
}
jclass clazz = env->FindClass("com.sfoam.hpcmom.cmaes.CmaesClient");
if (clazz == NULL) {
std::cout << "Failed creating CmaesClient" << std::endl;
} else {
std::cout << "Succeeded creating CmaesClient" << std::endl;
}
jmethodID constr = env->GetMethodID(clazz, "<init>", "([Ljava/lang/String;)V");
jstring jarPath = env->NewStringUTF("/home/azg/code/hpcmom/target/1.1.9-SNAPSHOT/hpcmom-cmaes/hpcmom-cmaes-1.1.9-SNAPSHOT.jar");
jobject object = env->NewObject(clazz, constr, jarPath);
delete options;
jvm->DestroyJavaVM();
而錯誤意味着它無法找到類,因此加載類似乎有些不對或者?
Succeeded creating JVM
Failed creating CmaesClient
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f5601067214, pid=25496, tid=140007371831104
#
# JRE version: Java(TM) SE Runtime Environment (7.0_51-b13) (build 1.7.0_51-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V [libjvm.so+0x645214] get_method_id(JNIEnv_*, _jclass*, char const*, char const*, bool, Thread*)+0x84
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/azg/code/sfoml/debug/hs_err_pid25496.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
Aborted (core dumped)
目錄/home/azg/code/hpcmom/target/1.1.9-SNAPSHOT/hpcmom-cmaes
包含所有需要的罐子。
name
:完全限定的類名(即包名, 由“/
”分隔 ,后跟類名)。
更改
env->FindClass("com.sfoam.hpcmom.cmaes.CmaesClient");
至
env->FindClass("com/sfoam/hpcmom/cmaes/CmaesClient");
(即用/
替換每個.
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.