#include #include JNIEnv* create_vm() { JavaVM* jvm; JNIEnv* env; JavaVMInitArgs args; JavaVMOption options[1]; int res; /* There is a new JNI_VERSION_1_4, but it doesn't add anything for the purposes of our example. */ args.version = JNI_VERSION_1_2; args.nOptions = 1; options[0].optionString = "-Djava.class.path=c:\\cygwin\\tmp\\javatest"; args.options = options; args.ignoreUnrecognized = JNI_TRUE; fprintf (stderr, "about to call CreateJavaVM.\n"); res = JNI_CreateJavaVM(&jvm, (void **)&env, &args); fprintf (stderr, "CreateJavaVM returned [%d].\n", res); return env; } void invoke_class(JNIEnv* env) { jclass helloWorldClass; jmethodID mainMethod; jobjectArray applicationArgs; jstring applicationArg0; fprintf (stderr, "step 2...\n"); helloWorldClass = (*env)->FindClass(env, "HelloWorld"); fprintf (stderr, " class = %p\n", helloWorldClass); fprintf (stderr, "step 3...\n"); mainMethod = (*env)->GetStaticMethodID(env, helloWorldClass, "main", "([Ljava/lang/String;)V"); fprintf (stderr, " method = %p\n", mainMethod); fprintf (stderr, "step 4...\n"); applicationArgs = (*env)->NewObjectArray(env, 1, (*env)->FindClass(env, "java/lang/String"), NULL); applicationArg0 = (*env)->NewStringUTF(env, "From-C-program"); // (*env)->SetObjectArrayElement(env, applicationArgs, 0, applicationArg0); fprintf (stderr, "step 5...\n"); (*env)->CallStaticVoidMethod(env, helloWorldClass, mainMethod, applicationArgs); } int main(int argc, char **argv) { JNIEnv* env = create_vm(); fprintf (stderr, "step 1 done...\n"); invoke_class( env ); return 0; }