Class 嵌套类的JNI签名?
我正在尝试在WindowsXP上使用JNI,java版本: java版本“1.6.0_13” Java(TM)SE运行时环境(build 1.6.0_13-b03) Java热点(TM)客户端虚拟机(构建11.3-b02,混合模式,共享) 尝试获取嵌套类的jclass时 jclass c=env->FindClass(“A$B”); 断言(c) 第二行断言,同样的东西在Linux上运行正常,Java版本略有不同(1.5…IIRC) 我试过几种排列方式,比如 LA$B; A.B LA.B 但是没有用 如有任何建议,将不胜感激Class 嵌套类的JNI签名?,class,nested,java-native-interface,signature,Class,Nested,Java Native Interface,Signature,我正在尝试在WindowsXP上使用JNI,java版本: java版本“1.6.0_13” Java(TM)SE运行时环境(build 1.6.0_13-b03) Java热点(TM)客户端虚拟机(构建11.3-b02,混合模式,共享) 尝试获取嵌套类的jclass时 jclass c=env->FindClass(“A$B”); 断言(c) 第二行断言,同样的东西在Linux上运行正常,Java版本略有不同(1.5…IIRC) 我试过几种排列方式,比如 LA$B; A.B LA.B 但是没有
马丁这个问题似乎在年内解决了 更新:Oracle移动了论坛,新位置为 以下是问题的解决方式: 好的,我终于找到问题了。嵌套的类被编译成一个单独的java类对象(一个$B.class)——这对于C/C++程序员来说有点出乎意料。我没有打包该文件,因此该类被报告为“未找到”。有趣的是,它在Linux上工作。谢谢你的帮助 我的另一个提示是:如果
FindClass
返回null,不要只是assert
和猜测。至少调用env->exceptiondescripe()
在stderr
上获取堆栈跟踪。更好的方法是,使用env->ExceptionOccurred()
检查抛出的Java异常,就像您调用的任何其他Java方法一样。链接现在已失效。(非常感谢甲骨文!)你能总结一下是什么吗?