jni GetMethodID(iaddrclass,“<init>”,“()V”);返回NULL以初始化java.net.InetAddress类的构造函数

时间:2015-09-02 12:19:21

标签: java android java-native-interface

我认为这是因为在Android ICS及更高版本中使用的压缩垃圾收集器。当我尝试调用构造函数异常时出现。我正在使用android 5.1.1。

jclass iaddrclass = env->FindClass("java/net/InetAddress");
if (iaddrclass == NULL) {
    jniThrowException(env, "java/lang/ClassNotFoundException",
            "java.net.InetAddress");
    return;
}

gCachedFields.iaddr_class = (jclass) env->NewGlobalRef(iaddrclass);
jmethodID iaddrclassinit = env->GetMethodID(iaddrclass, "<init>", "()V");

结果,iaddrclassinit为NULL

1 个答案:

答案 0 :(得分:0)

你不应该直接构造InetAddress个对象。 InetAddress类不提供公共构造函数,而是使用getByNamegetByAddress等静态方法返回InetAddress实例。

即使您想出于某种原因通过JNI直接构造InetAddress对象,there's no no-argument constructor in that class据我所知。

最好按照预期使用静态方法。