![]() |
JNI gesucht
Ich muss mit einem C-Programm eine Java Methode aufrufen. das geht mit JNI (Java Native Interface). Doch wo bekomme ich die jni.h Datei und alles, was ich sonst noch so dazu brauche? Ich habe schon dne ganzen Morgen gegoogelt, aber irgendwie keinen Download gefunden. :gruebel:
|
Re: JNI gesucht
You've got mail.
|
Re: JNI gesucht
Hi,
ich kann dir hier nur die Seite ![]() Gruß Der Unwissende |
Re: JNI gesucht
Ich habe jetzt folgendes Java Programm:
Code:
Dazu das C-Programm:
public class HelloWorld {
public static void main(String[] argv) throws Exception { HelloWorld test = new HelloWorld(); int res = test.Test(); System.in.read(); System.out.print(res); } public int Test() { System.out.print("Hello, world\n"); return 42; } }
Code:
Nur leider erkennt er die Datentypen JavaVMOption und JavaVMInitArgs nicht. Sie sind auch nicht in der jni.h datei zu finden. Den Code hab eich zwei PDFs. Lider wird da nicht gesagt, welche jni.h Datei verwendet wird.
#include <stdio.h>
#include "jni.h" int main() { JavaVMOption options[1]; JNIEnv *env; JavaVM *jvm; JDK1_1InitArgs vm_args; long status; jclass cls; jmethodID mid; jint square; jboolean not; options[0].optionString="-Djava.class.path=."; memset(&vm_args, 0, sizeof(vm_args)); vm_args.version = JNI_VERSION_1_2; vm_args.nOptions = 1; vm_args.options = options; status = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args); if (status != JNI_ERR) { cls = (*env)->FindClass(env, "HelloWorld"); if (cls != 0) {mid = (*env)->GetStaticMethodID(env,cls,"Test","(I)I"); if (mid != 0) {square = (*env)->CallStaticIntMethod(env,cls,mid,5); printf("Result of int Method:%d\n", square); (*jvm)->DestroyJavaVM(jvm); return 0; } else return -1; } #include <stdio.h> #include "jni.h" int main() { JavaVMOption options[1]; JNIEnv *env; JavaVM *jvm; JDK1_1InitArgs vm_args; long status; jclass cls; jmethodID mid; jint square; jboolean not; options[0].optionString="-Djava.class.path=."; memset(&vm_args, 0, sizeof(vm_args)); vm_args.version = JNI_VERSION_1_2; vm_args.nOptions = 1; vm_args.options = options; status = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args); if (status != JNI_ERR) { cls = (*env)->FindClass(env, "HelloWorld"); if (cls != 0) {mid = (*env)->GetStaticMethodID(env,cls,"Test","(I)I"); if (mid != 0) {square = (*env)->CallStaticIntMethod(env,cls,mid,5); printf("Result of int Method:%d\n", square); (*jvm)->DestroyJavaVM(jvm); return 0; } else return -1; } |
Re: JNI gesucht
Die jni.h findest du im JDK im include Verzeichnis. Die enthält (zumindest im JDK 1.5) auf jedenfall auch die Datentypen.
Gruß Der Unwissende |
Re: JNI gesucht
Ist das richtig, dass das JDG ca. 123 MB groß ist? dann dauert das noch eine Weile, bis ich das habe. :?
|
Re: JNI gesucht
JDG? Also das JDK ist im Download so in der Größe, auf der Platte gut 250 MByte, schon das JRE ist um die 130 MByte groß.
Ohne schnelle Leitung macht da Java auch gar keinen Spaß! Gruß Der Unwissende |
Re: JNI gesucht
Ja, JDK meine ich: java_ee_sdk-5-windows.exe
|
Re: JNI gesucht
Hm,
brauchst du wirklich die EE (Enterprise Edition?). Also Java unterscheidet hier die MicroEdition (für den Embedded Bereich gedacht, abgspeckter Funktionsumfang), die J2SE (Standard Edition), wird in der Regel als JDK bezeichnet und die J2EE (Enterprise Edition). Letztere enthält eine Menge an Enterprise Logik. Da kommen dann EnterpriseBeans zum Einsatz. Diese laufen in einer speziellen Umgebung (in einem Container). Die ermöglicht halt Skalierungen und Sicherheitsfeatures und nimmt dir komplett die Logik der Nebenläufigkeit ab (und und und). Dazu musst du die aber auch in einer Implementierung eines EE-Servers laufen lassen (Stichwort JBoss u.A.). Für die sollte eigentlich die J2SE reichen (wenn du nur Java + JNI verwenden möchtest). |
Re: JNI gesucht
Habe ich auch gerade gemerkt. Ich lade mir jetzt die SE Version runter. Werde ja dafür bezahlt, dass ich dem Download zu gucke. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz