从Android NDK SIGSEGV调用Java方法
Calling Java Method from Android NDK SIGSEGV
我正在尝试从 NDK 代码调用 java 方法。 C++代码为:
extern "C" JNIEXPORT jboolean JNICALL
Java_com_lipman_whiteboard_CameraProcessing_processBitmap(JNIEnv * env, jobject obj)
{
jclass callingClass = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(callingClass, "setProgressMax", "(I)V");
env->CallVoidMethod(obj, mid, 7);
}
在上面的代码片段中,"mid"始终为空。java 类的相关部分是:
public class CameraProcessing
{
private static native boolean processBitmap();
private void setProgressMax(int max)
{
}
有谁知道为什么"mid"总是空的?我做错了什么?
您已将本机processBitmap()
方法声明为静态,这意味着第二个参数是jclass
而不是jobject
。 当你调用GetObjectClass
时,你实际上是在得到jclass
的类,这意味着callingClass
只是java.lang.Class
,它没有定义一个setProgressMax
方法。 应该有一个例外挂起,并带有与此相关的消息。
将声明更改为:
private native boolean processBitmap();
然后重试。
调用私有方法应该不是 JNI 的问题。
此外,请确保在CallVoidMethod
返回后检查异常。
相关文章:
- Android:使用 c++ 中的 byte[] 参数调用 java 方法
- 如何在JNI中从线程内部调用JAVA方法
- Qt 调用具有 1 个以上参数的 java 方法
- Android 无法从本机代码调用 Java 方法 JNI
- 是否可以在SO库中公开C API以访问Android JAVA方法
- 如何从 NDK(JNI) 调用特定的 Java 方法
- 从 JNI 调用 getWritableDatabase (SQLCipher java 方法)
- 使用C 修改Java方法/字节码
- 使用 JNI 从 cpp 调用 java 方法时出现异常
- 在Qt中从C ++调用Java方法
- 使用C 获取Java对象来调用Java方法
- JNI:从C++调用JAVA方法,返回对象,引用和GC
- 从 Java 调用 c++,然后从相同的 c++ 方法调用 java 方法
- 使用jni.h在C++中编译java方法时出现构建错误
- 如何从C++/Qt调用QtActivity中的非静态Java方法
- 从Android NDK SIGSEGV调用Java方法
- 从c++调用非静态java方法时出错
- 使本机代码访问java方法和数据成员
- Android NDK调用java方法表单cpp
- 当我从C++调用Java方法时,我应该调用PushLocalFrame和PopLocalFrame吗