The program returns with -1 (unknow error). How can I get some more detailed information on what is the problem ? Did anyone make the same experience ? Regards, Tobias
lichade xun
Greenhorn
Joined: Nov 12, 2001
Posts: 1
posted
0
Isn't something missing from your options[0] setting? options[0].optionString = "-Djava.class.path=.:<where rt.jar>"; LX
Originally posted by Tobias Pfeifer: Hi there, I cannot start the VM with a C++ method. The method looks like this: void main (int argc, char *argv []) { JNIEnv *env; JavaVM *jvm; JavaVMInitArgs vm_args; JavaVMOption options[2]; jint res; jclass cls; jmethodID mid; jstring jstr; jobjectArray args; char classpath[1024]; char buffer [512], *psz; // JNI_GetDefaultJavaVMInitArgs(&vm_args); options[0].optionString = "."; // options[0].optionString = "-verbose:jni"; options[1].optionString = "-Djava.compiler=NONE"; vm_args.version = JNI_VERSION_1_2; vm_args.options = options; vm_args.nOptions = 2; vm_args.ignoreUnrecognized = JNI_FALSE; /* Create the Java VM */ res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); fprintf(stderr, "Starting VM\n"); if (res < 0) { switch ( res ) { case -1: fprintf(stderr, "/* unknown error */\n"); break; case -2: fprintf(stderr, "/* thread detached from the VM */\n"); break; case -3: fprintf(stderr, "/* JNI version error */\n"); break; case -4: fprintf(stderr, "/* not enough memory */\n"); break; case -5: fprintf(stderr, "/* VM already created */\n"); break; case -6: fprintf(stderr, "/* invalid arguments */\n"); break; default: fprintf(stderr, "Can't create Java VM\n"); } exit(1); return 123; }
The program returns with -1 (unknow error). How can I get some more detailed information on what is the problem ? Did anyone make the same experience ? Regards, Tobias
Tobias Pfeifer
Greenhorn
Joined: Nov 12, 2001
Posts: 2
posted
0
Originally posted by lichade xun: Isn't something missing from your options[0] setting? options[0].optionString = "-Djava.class.path=.:<where rt.jar>"; LX
Hi, that doesn't work either. Do you need to add this in the option part ? I thought that the "JavaHome" value in the registry was used to find the runtime classes. Regards, Tobias
manuel aldana
Ranch Hand
Joined: Dec 29, 2005
Posts: 308
posted
0
i know, the answer is most likely a bit late (first post was 2001 , the reason why i am answering is, that there has not been a possible solution to the symptom JNI_CreateJavaVM() returning -1 which solved my problem.
in my case jvm.dll must be kept in its installation directory. so don't just copy jvm.dll into the same directory of your JNI-application! it seems that jvm.dll is somehow using paths relative to its directory of java installation dir.
that means, that you need to set $PATH (or another appropriate env-var) to the directory where jvm.dll sits (JAVA_INSTALL_DIR/jre/bin/client/) so the system finds the jvm.dll when it is needed from your app.