我希望使用JNI(Java Native Interface)调用特定的Java setter方法,并将一个short[]缓冲区作为参数传递给它。
Java方法的实现如下:
public void setPcmLeft(short[] data) { pcm_l = data; }
在我的 C 函数内部,我该如何使用 JNI 调用这个方法。
目前我的代码如下:
void Java_com_companyName_lame_LameActivity_lameDecode(JNIEnv *env, jobject jobj)
{
jclass class = (*env)->GetObjectClass(env, jobj);
if (class != NULL) {
jmethodID setLeftDatatID = (*env)->GetMethodID(env, class, "<setPcmLeft>", "void(V)");
if (setLeftDatatID == NULL) {
LOGD("(Lame) No method setLeftData");
}
}
}
当我运行这个程序时,
setLeftDataID
始终为 NULL
。请注意,
jobj
参数是传递给我的对象,其中包含了 setPcmLeft
的实现。
jmethodID m_mid = env -> GetMethodID(m_cls,"<init>","()V");
- smwikipedia<init>
中使用它们,这是GetMethodID()
支持的,以允许引用构造函数。 "要获取构造函数的方法ID,请将<init>作为方法名称并将void(V)作为返回类型。" -- 来自http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html中`GetMethodID()`文档的说明。 - Andy Thomas