欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
//重导向文件
const char szStdoutFileName[] = “stdout.txt”;
const char szStderrFileName[] = “stderr.txt”;
//java程序的命令行参数
int nParamCount = 2;
const char *szParams[2] = …{“arg1″,”arg2”};
//加载JVM。
HINSTANCE jvmDll = LoadLibrary(szJvmPath);
if (jvmDll == NULL)
…{
printf(“加载JVM动态库错误。%l”, ::GetLastError());
return false;
}
//查找JNI_CreateJavaVM过程。
JNICREATEPROC jvmCreateProc = (JNICREATEPROC)GetProcAddress(jvmDll, “JNI_CreateJavaVM”);
if (jvmCreateProc == NULL)
…{
FreeLibrary(jvmDll);
printf(“查找JNI_CreateJavaVM过程错误。%l”, ::GetLastError());
return false;
}
//创建JVM。
JNIEnv *env;
JavaVM *jvm;
jint r = (jvmCreateProc)(&jvm, (void **)&env, &vm_args);
if (r < 0 || jvm == NULL || env == NULL)
…{
FreeLibrary(jvmDll);
printf( “创建JVM发生错误。”);
return false;
}
//重导向stdout, stderr到输出文件
if (!setStream(env, szStdoutFileName, “setOut”))
…{
printf(“设置stdout输出文件失败”);
return false;
}
if (!setStream(env, szStderrFileName, “setErr”))
…{
printf(“设置stderr输出文件失败”);
return false;
}
//加载启动类。
jclass serviceClass = env->FindClass(szStartClass);
if (env->ExceptionCheck() == JNI_TRUE || serviceClass == NULL)
…{
env->ExceptionDescribe();
env->ExceptionClear();
FreeLibrary(jvmDll);
printf(“加载启动类失败。”);
return false;
}
[1][2][3][4][5][6]
有时,明知错了,却欲罢不能,