在C++中创建Jvm调用相关的class

创建jvm已经没有问题了

#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; 

 
}

关于错误的处理:

一,找不到头文件

解决方法,在C++中创建Jvm调用相关的class_第1张图片



在C++中创建Jvm调用相关的class_第2张图片

你可能感兴趣的:(jni,错误处理,vs2012)