2012-09-03 34 views
0

類別:爲什麼這個簡單的JNI對象構造會導致虛擬機中止和SIGSEGV?

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 

回答

2

NewObject()預計類對象的指針作爲第二個參數。構造函數方法ID是第三個參數。像這樣重新編排:

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

其中17是構造函數的參數。

+0

這是'17'在這裏表示的是什麼? – nmxprime

+0

同樣的事情0在OP的NewObject()行中 - 構造函數的任意整數參數。 –

相關問題