嵌套类的JNI签名?

时间:2009-04-08 16:23:05

标签: class nested java-native-interface signature

我正在尝试在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;

但无济于事。

任何建议都将受到高度赞赏。

马丁

1 个答案:

答案 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方法一样。