JNI查找类java.lang.ClassNotFoundException

4

我正在编写一些JNI代码,用于调用我的JAVA程序中的类。我已经成功地使用静态方法在一个类中完成了这个过程。

目前,当我使用:

jclass proc_jclass = env->FindClass("example/io/struct/JavaClass");

它会导致JVM崩溃,出现以下错误:

java.lang.ClassNotFoundException.<init>(Ljava/lang/String;)V+3

我已经尝试定义类路径位置,但没有效果。非常感谢任何帮助。

谢谢。


1
你的类名真的是example.io.struct.JavaClass吗?你所说的“crashes the JVM”是什么意思?是热点崩溃吗?你是否存储了不应该存储的env ptr? - bmargulies
不是这样的。虽然很相似。是的,错误是热点崩溃。我没有以任何方式修改env指针。谢谢。 - Hugh
1个回答

6
我已经找到了答案。这个问题是通过将FindClass移动到JNIEXPORT方法的直接下方来解决的。正如bmargulies所述,这可能是由于env指针被修改导致的。通过将其移到方法顶部,可以避免这种情况。查看代码仍然不清楚问题的原因,但我会在找到后回报。此外,顶部提示使用变量,例如:
env->FindClass(str_class);

str_class被用来定义ClassPath,这样你可以快速测试哪些类是可访问的,而不需要重新编译。虽然很显然,但在调试时确实可以节省时间。


将我的 jclass proc_jclass = env->FindClass(“example/my/class/JavaClass”); 移动到我的 JNI 函数的第一行解决了这个问题。 - Sakiboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接