int init_jvm() { jint rc; // Get JVM options from os.ini init_jvm_args(); // Load VM if (hjvm == NULL) { char *jvmname = get_property(cfg, cfgname, "jvm", "jvm.dll"); hjvm = dlopen(jvmname, 0); if (hjvm == NULL) { syslog(LOG_ERR, "Error loading JVM %s", jvmname); return -1; } } if (!CreateJavaVM) { CreateJavaVM = (jint (JNICALL *)(JavaVM **pvm, void **env, void *args)) dlsym(hjvm, "JNI_CreateJavaVM"); if (!CreateJavaVM) { syslog(LOG_ERR, "Unable to find CreateJavaVM"); return -1; } } // Create VM instance if (!vm) { rc = CreateJavaVM(&vm, (void **) &env, &args); if (rc != JNI_OK) { syslog(LOG_ERR, "Error %d creating java vm", rc); return -1; } } else { rc = (*vm)->AttachCurrentThread(vm, (void **) &env, &args); if (rc != JNI_OK) { syslog(LOG_ERR, "Error %d attaching to vm", rc); return -1; } } return 0; }
void test_java_thread_setup(int argc, char *argv[]) { create_java_vm_func CreateJavaVM; JavaVMInitArgs args; JNIEnv * jni_env; int i; CreateJavaVM = test_get_java_vm_ptr(); assert(CreateJavaVM); args.version = JNI_VERSION_1_2; args.nOptions = argc; args.options = (JavaVMOption *) malloc(args.nOptions * sizeof(JavaVMOption)); args.options[0].optionString = "-Djava.class.path=."; for (i = 1; i < argc; i++) { args.options[i].optionString = argv[i]; args.options[i].extraInfo = NULL; } log_debug("test_java_thread_init()"); hythread_sleep(1000); CreateJavaVM(&GLOBAL_VM, &jni_env, &args); }
void SceneGraph::setJavaEnv(char *javaClassPath, jint (JNICALL *printfn)(FILE *fp, const char *format, va_list args)) { CreateJavaVM(javaClassPath, printfn); }