JVM可以';从C+;使用JNI时找不到类+; 我尝试用JNI调用C++中的java方法。首先,我举了个例子,试了试。我改变了JDK的路径,之后我可以运行这些示例,它们可以正常工作

JVM可以';从C+;使用JNI时找不到类+; 我尝试用JNI调用C++中的java方法。首先,我举了个例子,试了试。我改变了JDK的路径,之后我可以运行这些示例,它们可以正常工作,c++,java-native-interface,C++,Java Native Interface,之后,我尝试导入我自己的JAR文件并使用其中的一个类。我从示例中复制了代码,并用我自己的替换了类路径和类名: void MyCPPClass::CallJava() { JavaVM *jvm; // Pointer to the JVM (Java Virtual Machine) JNIEnv *env; // Pointer to native interface //==================

之后,我尝试导入我自己的JAR文件并使用其中的一个类。我从示例中复制了代码,并用我自己的替换了类路径和类名:

void MyCPPClass::CallJava()
{
    JavaVM *jvm;                // Pointer to the JVM (Java Virtual Machine)
    JNIEnv *env;                // Pointer to native interface

    //==================== prepare loading of Java VM ============================

    JavaVMInitArgs vm_args;                        // Initialization arguments
    JavaVMOption* options = new JavaVMOption[ 1 ];   // JVM invocation options
    options[ 0 ].optionString = "-Djava.class.path=MyJar.jar";   // where to find java .class
    vm_args.version = JNI_VERSION_1_8;             // minimum Java version
    vm_args.nOptions = 1;                          // number of options
    vm_args.options = options;
    vm_args.ignoreUnrecognized = false;     // invalid options make the JVM init fail

    //================= load and initialize Java VM and JNI interface ===============

    jint rc = JNI_CreateJavaVM( &jvm, (void**)&env, &vm_args );  // YES !!
    delete options;    // we then no longer need the initialisation options. 

    //========================= analyse errors if any  ==============================
    // if process interuped before error is returned, it's because jvm.dll can't be 
    // found, i.e.  its directory is not in the PATH. 

    if( rc != JNI_OK )
    {
        exit( EXIT_FAILURE );
    }    

    jclass cls1 = env->FindClass( "aaa/bbb/MyClass" );
    ...
}
JAR只包含一个class
aaa.bbb.MyClass
,它是用intellijidea和
mvn-package
命令创建的。我复制了可执行文件旁边的JAR文件

rc
的值始终为0(
JNI\u OK
),但
cls1
的值始终为
NULL
。我认为JVM可以找到JAR,因为当我调试时,我不能在
FindClass
之后删除JAR

JAR文件包含MyClass.class文件,我检查了它

我已经检查了之前的一些问题,但我不知道哪里出了错

更新:我试图将MyClass.class文件和MyJar.jar文件复制到前面链接的示例目录中,JVM找不到
MyClass
。我的java源文件可能缺少什么?包声明是正确的


是什么原因导致JVM找不到MyClass?

将解决方案从一个问题转移到另一个答案:

解决方案:我必须将maven依赖项的JAR添加到类路径中。现在它工作了