我正在尝试在WindowsXP上使用JNI,java版本:
java版“1.6.0_13” Java(TM)SE运行时环境(版本1.6.0_13-b03) Java HotSpot(TM)客户端VM(版本11.3-b02,混合模式,共享)
尝试获取嵌套类的jclass时
jclass c = env-> FindClass(“A $ B”); 断言(c);
第二行断言,同样的事情在Linux上运行正常,Java版本略有不同(1.5 ... IIRC)。
我尝试了几种排列,比如
LA $ B; A·B LA.B;
但无济于事。
任何建议都将受到高度赞赏。
马丁
答案 0 :(得分:1)
似乎问题已在this thread中得到解决。
更新:Oracle移动了论坛,新位置为Signature for nested class?
以下是问题的解决方法:
好的,我终于找到了问题。嵌套类被编译成一个单独的java类对象(A $ B.class) - 对于C / C ++程序员来说有点未见。我没有打包文件,因此该类被报告为“未找到”。有趣的是它在Linux上有效。谢谢你的帮助!
我的另一个暗示:如果FindClass
返回null,则不仅仅是assert
并猜测。至少致电env->ExceptionDescribe()
以获取stderr
上的堆栈跟踪。更好的是,使用env->ExceptionOccurred()
来检查抛出的Java异常,就像您调用的任何其他Java方法一样。