在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



相关文章
相关标签/搜索