// Demo2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
#include <string>
#include <iostream>
using namespace std;
string jstring2str(JNIEnv* env, jstring jstr);
string JStringToCString (JNIEnv *env, jstring str);
char* result=NULL;
///
string js2s(JNIEnv* env, jstring jstr){
jclass clsstring = (env)->FindClass("java/lang/String" );
jstring strencode = (env)->NewStringUTF( "utf-8");
jmethodID mid = (env)->GetMethodID(clsstring,"getBytes","(Ljava/lang/String;)[B");
if(mid==0){
cout<<"getBytes method failure......"<<endl;
return "";
}
const char* strCIn = (env)->GetStringUTFChars(jstr,NULL);
string s(strCIn);
(env)->ReleaseStringUTFChars(jstr , strCIn);
return s;
}
int main() {
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean not ;
jobject jobj;
//////////"-Djava.class.path=.;D:\\;D:/AlienRFID.jar"中“D:\\”指的是要调用的java的类文件所在的路径,“D:/AlienRFID.jar”用于指定第三方jar文件的路径
options[0].optionString = "-Djava.class.path=.;D:\\;D:/AlienRFID.jar"; /////***很重要呀。。。。
vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = 1;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, ( void**)&env, &vm_args);
if (status != JNI_ERR) {
cout << "create javaVM" << std::endl; ////可以创建虚拟机
cls = env->FindClass( "ReadWrite"); ///这里失败了
if (cls !=0) {
cout << "get class" << std::endl;
///开始java的线程
mid = env->GetStaticMethodID(cls, "startListening" , "()V");
if (mid !=0) {
cout << "get send method" << std::endl;
env->CallStaticIntMethod(cls, mid);
}
mid = env->GetStaticMethodID(cls, "getTagData" , "()Ljava/lang/String;" );
if (mid !=0) {
cout<<"getMessage method"<<endl;
string temp("hello");
string last("");
while(true){
jstring message = (jstring)env->CallStaticObjectMethod(cls,mid);
if(message != NULL){
//last = jstring2str(env,message);
last = js2s(env,message);
if(last!=temp){
temp = last;
std::cout <<"--------"<<last<<"==="<< std::endl;
}
//m_threadSleep(2,0);
}else{
std::cout <<"--------message=NULL----"<< std::endl;
}
}
}//*/
}
jvm->DestroyJavaVM();
cout<<"success destory java VM"<<endl;
int i;
cin>>i;
return 0;
} else {
cout<<"fail destory java VM"<<endl;
int j;
cin>>j;
return -1;
}
}