gpt4 book ai didi

java - JNI- FindClass 返回 null

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:29 25 4
gpt4 key购买 nike

我知道这是一个常见问题,我搜索了谷歌并查看了前 4 页中的所有内容,尝试了很多可能性但到目前为止没有结果。

C++代码部分:

JNIEnv* create_vm(JavaVM ** jvm) {

char * str=(char *)"-Djava.class.path=.";

JNIEnv *env;

JavaVMInitArgs vm_args;

JavaVMOption options;

options.optionString = str; //Path to the java source code

vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6

vm_args.nOptions = 1;

vm_args.options = &options;

vm_args.ignoreUnrecognized = 0;



int ret = JNI_CreateJavaVM(jvm, (void**)&env, &vm_args);

if(ret < 0)

printf("\nUnable to Launch JVM\n");

return env;

}



int main(int argc, char* argv[])

{

JNIEnv *env;

JavaVM * jvm;

env = create_vm(&jvm);

if (env == NULL)

return 1;




jclass clsMain=NULL;
jmethodID mid = NULL;

//Obtaining Classes
clsMain = env->FindClass("Main");

//Obtaining Method IDs
if (clsMain != NULL)
{
mid = env->GetStaticMethodID(clsMain, "myMethod", "(Ljava/lang/String;)Z");
}
else
{
printf("\nUnable to find the requested class\n"); //this runs
}

...

我不知道如何在 JNI 中捕获异常并了解它的名称。

此外,Main.class 与包含此 C++ 代码部分的文件位于同一目录中。


编辑:

我在 FindClass 行之后添加这些行以从 Java 中查找异常:

clsMain = env->FindClass("Main");

jthrowable exc;
exc = env->ExceptionOccurred();
if (exc) {
jclass newExcCls;
env->ExceptionDescribe();
env->ExceptionClear();

}

然后它抛出 NoClassDefFoundException

因此我编辑了 JavaVMInitArgs.options

我的意思是我编辑:

char * str=(char *)"-Djava.class.path=.";

线到:

 char * str=(char *)"-Djava.class.path=/path/to/my/jars:/path/to/my/other/jars:."; 

现在一切都很好。谢谢

最佳答案

NoClassDefFoundError 当 JVM 在运行时无法找到一个类而编译器在编译时仍能找到该类时发生。

所以您的问题可能与 Java 代码的内容和/或类路径的定义有关。您的 Java 代码可能正在调用当前目录中不可用的类。

您应该做的是创建一个包含 JNI 调用所需的所有内容的 jar 文件。

关于java - JNI- FindClass 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7470859/

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