File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Other JSE/JEE APIs and the fly likes JNI_CreateJavaVM returns with -1 Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Other JSE/JEE APIs
Bookmark "JNI_CreateJavaVM returns with -1" Watch "JNI_CreateJavaVM returns with -1" New topic
Author

JNI_CreateJavaVM returns with -1

Tobias Pfeifer
Greenhorn

Joined: Nov 12, 2001
Posts: 2
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;
}

fprintf(stderr, "Seems to run");
cls = env->FindClass("te");
if (cls == 0) {
fprintf(stderr, "Can't find hello class\n");
exit(1);
}
jvm->DestroyJavaVM();
// return 0;

}

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
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;
}

fprintf(stderr, "Seems to run");
cls = env->FindClass("te");
if (cls == 0) {
fprintf(stderr, "Can't find hello class\n");
exit(1);
}
jvm->DestroyJavaVM();
// return 0;

}

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
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
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.


aldana software engineering blog & .more
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: JNI_CreateJavaVM returns with -1