在C++中建立Jvm調用相關的class

建立jvm已經沒有問題了 java

#include <stdio.h>
#include <jni.h> 

 #include <stdlib.h> 

 
 int main() { 

     // 定義用到的變量 

     int res; 

     JavaVM *jvm; 

     JNIEnv *env; 

     JavaVMInitArgs vm_args; 

     JavaVMOption options[3]; 

     vm_args.version; 

      

     // 設置初始化參數 

     options[0].optionString = "-Djava.compiler=NONE"; 

     // classpath有多個時,用";"分隔,UNIX下以":"分割。 

     options[1].optionString = "-Djava.class.path=F:\Practice\jni\bin"; 

     // 用於跟蹤運行時的信息 

     options[2].optionString = "-verbose:jni"; 

     // 版本號設置不能漏 

     vm_args.version = JNI_VERSION_1_6; 

     vm_args.nOptions = 3; 

     vm_args.options = options; 

     vm_args.ignoreUnrecognized = JNI_TRUE; 

     // 1.初始化虛擬機 

     res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); 

     if (res < 0) 

     { 

         fprintf(stderr, "Can't create Java VM\n"); 

         exit(1); 

     } 

     // 2.獲取類 

     jclass cls = env->FindClass("jni/test/Demo"); 

     // 3.獲取類的方法 

     jmethodID mid= env->GetMethodID(cls,"getMessage","()Ljava/lang/String;"); 

     // 獲取Java的構造方法 

     jmethodID con=env->GetMethodID(cls,"<init>","(Ljava/lang/String;)V"); 

     jstring strinit = env->NewStringUTF("Still is coding!"); 

     jvalue arg[1]; 

     arg[0].l = strinit; 

     //env->AllocObject(cls); 

     // 4.建立類的對象 

     jobject obj = env->NewObjectA(cls,con,arg); 

     // 調用對象的方法 

     jstring msg = (jstring)env-> CallObjectMethod(obj, mid); 

      

     //cout<<msg<<endl; 

     char *str=(char *)env->GetStringUTFChars(msg,JNI_FALSE); 

     printf("%s===",str); 

     // 5.退出虛擬機 

     jvm->DestroyJavaVM(); 

     fprintf(stdout, "Java VM destory.\n"); 

     return 0; 

 
}

關於錯誤的處理: jvm

一,找不到頭文件 spa

解決方法, code



相關文章
相關標籤/搜索