使用JNI调用API访问静态枚举字段

时间:2010-05-16 12:01:03

标签: java java-native-interface invocation-api

如何使用JNI调用API

访问静态枚举字段

我正在尝试使用以下代码从Glassfish api访问glassfish org.glassfish.api.embedded.ContainerBuilder.Type枚举

jclass Type= env->FindClass( 
    "org/glassfish/api/embedded/ContainerBuilder$Type");
jfieldID Type_web=env->GetStaticFieldID(
    Type,"web","org/glassfish/api/embedded/ContainerBuilder$Type");

但它总是给我错误Exception in thread "main" java.lang.NoSuchFieldError: web,我该如何访问该字段?

3 个答案:

答案 0 :(得分:6)

实际上我在前面错过L而在类名末尾错过了;,我做了以下更改

jfieldID Type_web=env->GetStaticFieldID(
    Type,"web","Lorg/glassfish/api/embedded/ContainerBuilder$Type;");

答案 1 :(得分:2)

java.lang.Class getEnumConstants中有一个方法。

根据文件:

  

返回此枚举的元素   如果此Class对象为class或null   不代表枚举类型。

答案 2 :(得分:1)

我自己没有使用反射来查看枚举类,但它们可能以奇怪的方式存储。在您的情况下,我会调用Class.getFields()并查看班级字段的列表。