0

クラス:

package com.example.foo;

public class Dummy
{
    int value;

    public Dummy(int value)
    {
        this.value = value;
    }   
}

JNI スニペット:

jclass class = (*jni_env)->FindClass(jni_env, "com/example/foo/Dummy");
jmethodID constructor = (*jni_env)->GetMethodID(jni_env, class, "<init>", "(I)V");
jobject object = (*jni_env)->NewObject(jni_env, constructor, 0);

LogCat 出力:

09-03 11:02:02.937: W/dalvikvm(2179): Invalid indirect reference 0x44e9cf80 in decodeIndirectRef
09-03 11:02:02.937: E/dalvikvm(2179): VM aborting
09-03 11:02:02.937: A/libc(2179): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 2179
4

1 に答える 1

2

NewObject()2 番目のパラメーターとしてクラス オブジェクト ポインターが必要です。コンストラクター メソッド ID は 3 番目のパラメーターです。次のように再定式化します。

jobject object = (*jni_env)->NewObject(jni_env, class, constructor, 17); 

17 はコンストラクターへの引数です。

于 2012-09-03T18:59:39.557 に答える