JNI CallStaticVoidMethod
を呼び出した後、プロセスは適切に開始されますが、コードにJava
は戻りません。その後、終了します。C++
私java code
は持っていませんが、持ってsystem.exit(0)
いるだけですreturn;
jclass StringClass = m_JVMEnv->FindClass("java/lang/String");
int numOfArguments = (int)m_ServerArguments.size() + 4 ;
int argumentIndex = 0;
jobjectArray jargs = m_JVMEnv->NewObjectArray(numOfArguments, StringClass, NULL);
m_JVMEnv->SetObjectArrayElement(jargs, argumentIndex++, m_JVMEnv->NewStringUTF("start"));
std::string strJavaClassPath = "-classpath=";
strJavaClassPath += "\"";
for ( std::size_t idx = 0; idx < m_listOfJars.size() - 1 ; idx++) {
strJavaClassPath += m_ProductLibDir + "\\lib\\" + m_listOfJars[idx] + ";";
}
strJavaClassPath += m_ProductLibDir + "\\lib\\" + m_listOfJars[m_listOfJars.size() - 1] ;
strJavaClassPath += "\"";
m_JVMEnv->SetObjectArrayElement(jargs, argumentIndex++, m_JVMEnv->NewStringUTF(strJavaClassPath.c_str()));
for ( std::vector<std::string>::iterator iter = m_ServerArguments.begin(); iter != m_ServerArguments.end(); ++iter) {
std::string argument = *iter;
m_JVMEnv->SetObjectArrayElement(jargs, argumentIndex++, m_JVMEnv->NewStringUTF(argument.c_str()));
}
m_JVMEnv->SetObjectArrayElement(jargs, argumentIndex, m_JVMEnv->NewStringUTF("-dir=E:\\Avinash\\personal\\work\\CreateJvm\\Debug"));
m_JVMEnv->CallStaticVoidMethod(m_CacheServerLauncherClass, m_MainMethodID, jargs);
std::cout << "I am done with launching java program" << std::endl;
m_RunningJVMInstance->DestroyJavaVM();
CheckForJNIException();
m_JVMEnv->CallStaticVoidMethod(m_CacheServerLauncherClass, m_MainMethodID, jargs);
この行の後、プログラム制御は戻りません。