VC调JAVA的有关问题(解决再加分,)
VC调JAVA的问题(解决再加分,在线等)
我要通过JNI调用JAVA的方法是这样的:
class HelloWorld {
public static String AddJavaStr(String str, int i){
String stri;
stri = String.valueOf(i);
str = "Hello " + str + " (JAVA) " + stri;
return str;
}
}
用VC写的代码是这样的:
UINT RunJava(CString str, int i)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString stri;
stri.Format( "%d ", i);
MessageBox(NULL,str + " " + stri , "VC INFORMATION ",MB_OK);
JNIEnv *env;
JavaVM *jvm;
jint res;
char * strTemp = (char *)(const char *)str;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
memset(&vm_args, 0, sizeof(vm_args));
//进行初始化工作
options[0].optionString = "-Djava.compiler=NONE ";
options[1].optionString = "-Djava.class.path=G:\\cy\\VCDLLRUNJAVA\\VCDLLRUNJAVA\\ ";
options[2].optionString = "-verbose:jni ";
vm_args.version=JNI_VERSION_1_4; //版本号设置
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args); //创建JVM
if (res < 0)
{
MessageBox(NULL, "虚拟机创建失败 ", "VC INFORMATION ",MB_OK);
exit(1);
}
else
{
MessageBox(NULL, "虚拟机创建成功 ", "VC INFORMATION ",MB_OK);
}
jclass cls;
jmethodID mid;
jstring jstr;
// TODO: Add your control notification handler code here
cls = env-> FindClass( "HelloWorld ");
if(env-> ExceptionOccurred()!=NULL)
{
MessageBox(NULL, "找不到类 ", "VC INFORMATION ",MB_OK);
exit(1);
}
else
{
MessageBox(NULL, "找到类 ", "VC INFORMATION ",MB_OK);
}
mid = env-> GetStaticMethodID(cls, "AddJavaStr ", "(Ljava/lang/String;I)Ljava/lang/String; ");
if(env-> ExceptionOccurred()!=NULL)
{
MessageBox(NULL, "找不到MAIN()方法 ", "VC INFORMATION ",MB_OK);
exit(1);
}
else
{
MessageBox(NULL, "找到MAIN()方法 ", "VC INFORMATION ",MB_OK);
}
jvalue array[2];
jstr = env-> NewStringUTF(strTemp);
jint ji = i;
array[0].l= jstr;
array[1].i= ji;
jobject jstr2 = env-> CallStaticObjectMethod(cls, mid, array); //调用Java程序main()方法,启动Java程序
if(env-> ExceptionOccurred()!=NULL)
{
我要通过JNI调用JAVA的方法是这样的:
class HelloWorld {
public static String AddJavaStr(String str, int i){
String stri;
stri = String.valueOf(i);
str = "Hello " + str + " (JAVA) " + stri;
return str;
}
}
用VC写的代码是这样的:
UINT RunJava(CString str, int i)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString stri;
stri.Format( "%d ", i);
MessageBox(NULL,str + " " + stri , "VC INFORMATION ",MB_OK);
JNIEnv *env;
JavaVM *jvm;
jint res;
char * strTemp = (char *)(const char *)str;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
memset(&vm_args, 0, sizeof(vm_args));
//进行初始化工作
options[0].optionString = "-Djava.compiler=NONE ";
options[1].optionString = "-Djava.class.path=G:\\cy\\VCDLLRUNJAVA\\VCDLLRUNJAVA\\ ";
options[2].optionString = "-verbose:jni ";
vm_args.version=JNI_VERSION_1_4; //版本号设置
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args); //创建JVM
if (res < 0)
{
MessageBox(NULL, "虚拟机创建失败 ", "VC INFORMATION ",MB_OK);
exit(1);
}
else
{
MessageBox(NULL, "虚拟机创建成功 ", "VC INFORMATION ",MB_OK);
}
jclass cls;
jmethodID mid;
jstring jstr;
// TODO: Add your control notification handler code here
cls = env-> FindClass( "HelloWorld ");
if(env-> ExceptionOccurred()!=NULL)
{
MessageBox(NULL, "找不到类 ", "VC INFORMATION ",MB_OK);
exit(1);
}
else
{
MessageBox(NULL, "找到类 ", "VC INFORMATION ",MB_OK);
}
mid = env-> GetStaticMethodID(cls, "AddJavaStr ", "(Ljava/lang/String;I)Ljava/lang/String; ");
if(env-> ExceptionOccurred()!=NULL)
{
MessageBox(NULL, "找不到MAIN()方法 ", "VC INFORMATION ",MB_OK);
exit(1);
}
else
{
MessageBox(NULL, "找到MAIN()方法 ", "VC INFORMATION ",MB_OK);
}
jvalue array[2];
jstr = env-> NewStringUTF(strTemp);
jint ji = i;
array[0].l= jstr;
array[1].i= ji;
jobject jstr2 = env-> CallStaticObjectMethod(cls, mid, array); //调用Java程序main()方法,启动Java程序
if(env-> ExceptionOccurred()!=NULL)
{