Я пытаюсь вызвать функцию java на C ++. Он отлично работает в Eclipse IDE, но когда я строю войну и работаю в tomcat. Я могу вызвать функцию C ++ из приложения Springboot. Но не удалось вызвать функцию java из C ++. Поскольку он не может найти класс, который я упомянул с пакетом.
Ниже приведен мой пример кода. В любом случае, это исправить?
мой код C ++
void myClientEvents::SendEvents(const char* ack) {
//Get current thread JNIEnv
JNIEnv * ENV;
WriteLogFile("Get current thread JNIEnv");
try {
WriteLogFile(ack);
int stat = savedVM->GetEnv((void **)&ENV, JNI_VERSION_1_8);
WriteLogFile("stat");
if (stat == JNI_EDETACHED) //We are on a different thread, attach
{
WriteLogFile("We are on a different thread, attach");
savedVM->AttachCurrentThread((void **)&ENV, NULL);
}
if (ENV == NULL)
{
WriteLogFile("Cant attach to java, bail");
//Cant attach to java, bail
}
//Get the Listener class reference
if (saved_listener_instance != NULL) {
WriteLogFile("Get the Listener class reference");
jclass listenerClassRef = ENV->FindClass("org/trinity/serviceImpl/CadiAstroServiceImpl");
if (listenerClassRef==NULL)
{
WriteLogFile("Class Not found"); //This line is printing for tomcat
}
WriteLogFile("Use Listener class reference to load the eventOccurred method");
//Not moving forward from above log in tomcat
jmethodID ctor = ENV->GetMethodID(listenerClassRef, "<init>", "()V");
jobject object = ENV->NewObject(listenerClassRef, ctor);
//Use Listener class reference to load the eventOccurred method
jmethodID listenerEventOccured = ENV->GetMethodID(listenerClassRef, "eventOccurred", "(Ljava/lang/String;)V");
WriteLogFile("jmethodID created");
jstring jstr = ENV->NewStringUTF(ack);
WriteLogFile("invoke listener eventOccurred");
//invoke listener eventOccurred
ENV->CallVoidMethod(object, listenerEventOccured, jstr);
ENV->DeleteLocalRef(jstr);
ENV->DeleteLocalRef(object);
ENV->DeleteLocalRef(listenerClassRef);
}
else {
WriteLogFile("Error getting class");
}
}
catch (const char* msg) {
WriteLogFile(msg);
}
}
мой java метод в указанном классе
public void eventOccurred(String info) {
System.out.println(info);
}