Java 如何使用C++;jni环境 我试图使用C++代码JNI LIB运行SpRunBooDebug应用程序JAR文件:使用以下代码: void init_jni() { const int kNumOptions = 1; Jav
如何使用C++;jni环境 我试图使用C++代码JNI LIB运行SpRunBooDebug应用程序JAR文件:使用以下代码:Java 如何使用C++;jni环境 我试图使用C++代码JNI LIB运行SpRunBooDebug应用程序JAR文件:使用以下代码: void init_jni() { const int kNumOptions = 1; Jav,java,c++,java-native-interface,Java,C++,Java Native Interface,如何使用C++;jni环境 我试图使用C++代码JNI LIB运行SpRunBooDebug应用程序JAR文件:使用以下代码: void init_jni() { const int kNumOptions = 1; JavaVMOption options[kNumOptions] = { {const_cast<char *>("-Djava.class.path=app-0.0.1-SNAPSHOT.jar"), null
void init_jni() {
const int kNumOptions = 1;
JavaVMOption options[kNumOptions] = {
{const_cast<char *>("-Djava.class.path=app-0.0.1-SNAPSHOT.jar"), nullptr},
};
JavaVMInitArgs vmArgs = {
JNI_VERSION_1_8, kNumOptions, options, JNI_TRUE
};
// Create the JVM
JavaVM *javaVM;
JNIEnv *jniEnv;
long flag = JNI_CreateJavaVM(&javaVM, (void **) &jniEnv, &vmArgs);
if (flag == JNI_ERR) {
cout << "Error creating VM. Exiting...\n";
exit(1);
}
jclass jcls = jniEnv->FindClass("org/springframework/boot/loader/JarLauncher");
if (jcls == nullptr) {
jniEnv->ExceptionDescribe();
javaVM->DestroyJavaVM();
exit(1);
}
jmethodID methodId = jniEnv->GetStaticMethodID(jcls, "main", "([Ljava/lang/String;)V");
if (methodId == nullptr) {
jniEnv->ExceptionDescribe();
javaVM->DestroyJavaVM();
exit(1);
}
jniEnv->CallStaticVoidMethod(jcls, methodId);
if (jniEnv->ExceptionCheck()) {
jniEnv->ExceptionDescribe();
jniEnv->ExceptionClear();
}
javaVM->DestroyJavaVM();
}
你找到解决办法了吗?@bin先生还没有。我最后使用了另一种方法,这很糟糕,但我很想使用这种方法。为什么你要调用
org.springframework.boot.loader.jarlauncher
来代替你的静态主应用程序函数?@MrBin因为主类通常在/boot-INF/classes/
中,无法运行。而且,org.springframework.boot.loader.JarLauncher
通常是spring boot的主类,对吗?你找到解决方案了吗?@MrBin还没有。我最后使用了另一种方法,这很糟糕,但我很想使用这种方法。为什么你要调用org.springframework.boot.loader.jarlauncher
来代替你的静态主应用程序函数?@MrBin因为主类通常在/boot-INF/classes/
中,无法运行。而且,org.springframework.boot.loader.JarLauncher
通常是SpringBoot的主类,对吗?
Exception in thread "main" java.lang.CloneNotSupportedException: java.lang.Class
at java.lang.Object.clone(Native Method)
at org.springframework.boot.loader.MainMethodRunner.<init>(MainMethodRunner.java:41)
at org.springframework.boot.loader.Launcher.createMainMethodRunner(Launcher.java:99)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)