gpt4 book ai didi

c++ - 从 C++ 使用 JNI 时,JVM 找不到类

转载 作者:太空狗 更新时间:2023-10-29 23:12:38 25 4
gpt4 key购买 nike

我正在尝试通过 JNI 从 C++ 调用 JAVA 方法。首先,我得到了this例如,尝试一下。我更改了 JDK 的路径,之后我可以运行示例并且它们正常工作。

之后,我尝试导入自己的 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 仅包含一个类 aaa.bbb.MyClass,它是使用 IntelliJ IDEA 和 mvn package 命令制作的。我将 JAR 文件复制到我的可执行文件旁边。

rc 的值始终为 0 (JNI_OK),但 cls1 的值始终为 NULL .我认为 JVM 可以找到 JAR,因为在调试时我无法在 FindClass 之后删除 JAR。

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

我已经检查了一些以前的问题( 123 和其他一些问题),但我不知道哪里出错了。

更新:我尝试将 MyClass.class 文件和 MyJar.jar 文件复制到之前链接的示例目录中,但 JVM 找不到 MyClass。我的 java 源文件中可能缺少某些内容?包声明正确。

JVM找不到MyClass是什么原因?

最佳答案

将解决方案从问题移动到答案:

SOLUTION: I had to add the maven dependencies' JARs to the classpath. Now it works!

关于c++ - 从 C++ 使用 JNI 时,JVM 找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44927375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com