Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用C++;jni环境 我试图使用C++代码JNI LIB运行SpRunBooDebug应用程序JAR文件:使用以下代码: void init_jni() { const int kNumOptions = 1; Jav_Java_C++_Java Native Interface - Fatal编程技术网

Java 如何使用C++;jni环境 我试图使用C++代码JNI LIB运行SpRunBooDebug应用程序JAR文件:使用以下代码: void init_jni() { const int kNumOptions = 1; Jav

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

如何使用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"), 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)