¿Es posible crear una JVM desde dentro de un método JNI usando la API JNI?creando una JVM desde dentro de un método JNI
He intentado hacer esto usando la función JNI "JNI_CreateJavaVM()", pero no está funcionando (la función sigue devolviendo un valor menor que cero).
Aquí es el código básico que estoy usando (C++):
JNIEnv *env;
JavaVM *jvm;
jint res;
#ifdef JNI_VERSION_1_2
JavaVMInitArgs vm_args;
JavaVMOption options[2];
options[0].optionString =
"-Djava.class.path=" USER_CLASSPATH;
options[1].optionString = "-verbose:jni";
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 2;
vm_args.ignoreUnrecognized = JNI_TRUE;
/* Create the Java VM */
res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
#else
JDK1_1InitArgs vm_args;
char classpath[1024];
vm_args.version = 0x00010001;
JNI_GetDefaultJavaVMInitArgs(&vm_args);
/* Append USER_CLASSPATH to the default system class path */
sprintf(classpath, "%s%c%s",
vm_args.classpath, PATH_SEPARATOR, USER_CLASSPATH);
vm_args.classpath = classpath;
/* Create the Java VM */
res = JNI_CreateJavaVM(&jvm, &env, &vm_args);
#endif /* JNI_VERSION_1_2 */
Dónde USER_CLASSPATH contiene la ruta a las clases que desea cargar. Después de que se ejecuta el código anterior, res < 0, lo que indica que JNI_CreateJavaVM() falló. El código anterior es parte de un método nativo escrito en C++ llamado desde Java. ¿Alguna idea sobre cómo hacer que esto funcione?
Gracias.
¿Se define 'PATH_SEPARATOR'? – trashgod
Iba a preguntar SO si es posible tener funciones 'JNIEXPORT' en una aplicación C++ que invoca una JVM, y creo que esta pregunta responde a la mía (no). – StockB