#include #include int main(int argc, char *argv[]) { JNIEnv *env; JavaVM *jvm; JavaVMInitArgs jvm_args; jint res; jclass main_class, string_class; jmethodID method_id; jobjectArray args; int i; JavaVMOption options[3]; options[0].optionString = "-Djava.compiler=NONE"; /* Kein JIT-Compiler */ options[1].optionString = "-Djava.class.path=."; /* Klassenpfad setzen */ options[2].optionString = "-verbose:jni,gc"; /* jni, gc, class */ jvm_args.version = JNI_VERSION_1_4; /* Die JDK-Version */ jvm_args.options = options; jvm_args.nOptions = 3; jvm_args.ignoreUnrecognized = 1; /* Die JVM erzeugen */ res = JNI_CreateJavaVM(&jvm, (void**)&env, &jvm_args); if (res < 0) { fprintf(stderr, "Konnte JVM nicht erzeugen! Code %d\n", res); exit(1); } /* Die Klasse, die aufgerufen werden soll, holen */ if ((main_class = (*env)->FindClass(env, "Hello")) == NULL) { fprintf(stderr, "Konnte Klasse 'Hello' nicht finden!"); exit(1); } /* Eine Referenz auf die statische Methode main() der Klasse holen */ method_id = (*env)->GetStaticMethodID(env, main_class, "main", "([Ljava/lang/String;)V"); if (method_id == 0) { fprintf(stderr, "Konnte main(String []args) nicht finden!\n"); exit(1); } /* Eine Klasse vom Typ String holen */ if ((string_class = (*env)->FindClass(env, "java/lang/String")) == NULL){ fprintf(stderr, "Konnte String-Klasse nicht erzeugen!\n"); exit(1); } /* Ein String-Array für die Übergabeparameter erzeugen. Da in C der erste Parameter der Name der Datei ist, muss dieses Array um 1 kleiner sein. */ if ((args = (*env)->NewObjectArray(env, argc-1, string_class, NULL))==NULL) { fprintf(stderr, "Konnte String-Array nicht erzeugen!\n"); exit(1); } /* Das String-Array wird mit Werten gefüllt */ for (i=1; iSetObjectArrayElement(env, args, i-1, (*env)->NewStringUTF(env, argv[i])); /* Die Methode wird nun aufgerufen */ (*env)->CallStaticVoidMethod(env, main_class, method_id, args); /* Nach dem Programmdurchlauf wird die JVM zerstört */ (*jvm)->DestroyJavaVM(jvm); return 0; } --- Java-Klasse --- public class Hello { public static void main(String[] args) { System.out.print("Hallo "); for (int i=0; i0) System.out.print(" und "); else if (i>0) System.out.print(", "); System.out.print(args[i]); } } }