当前位置: 首页 > 知识库问答 >
问题:

JNI回调错误

晋承运
2023-03-14

我在研究JNI的回电

    null
JNIEXPORT jstring JNICALL
Java_com_example_arjunh_myapplication_MainActivity_getJniString(JNIEnv *env, jobject instance) {

jstring jstr = env->NewStringUTF("This string comes from JNI");

jclass clazz = env->FindClass("MainActivity");  // Error at this line

jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)V");


jobject result = env->CallObjectMethod(instance, messageMe, jstr);

const char* str = env->GetStringUTFChars((jstring) result, NULL);
printf("%s\n", str);

env->ReleaseStringUTFChars(jstr, str);


return env->NewStringUTF("Hello from JNI!");
}
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    btnAdd = (Button) findViewById(R.id.btnAdd);
    tv = (TextView) findViewById(R.id.sample_text);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            getJniString();

        }
    });

}


public void messageMe(String text) {

    tv.setText(text);

}
 ClassNotFoundException: Didn't find class "MainActivity" on path: DexPathList[[zip file "/data/app/com.example.arjunh.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.arjunh.myapplication-1/lib/arm64, /data/app/com.example.arjunh.myapplication-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]

共有1个答案

何海
2023-03-14

我认为您应该按照文档中的建议指定包名称:

名称:完全限定的类名(即包名,用“/”分隔,后跟类名)。如果名称以“[”(数组签名字符)开头,则返回一个数组类。字符串以修改的UTF-8编码。

jclass clazz = env->FindClass("your/package/name/MainActivity")
 类似资料:
  • 希望你做得很好。 我有一个C语言的JNI实现,其中一个C函数连接到当前JVM线程并回调一个Java方法,这实际上是在attachCurrentThread()函数调用时使JVM崩溃。我的实现基于链接中给出的答案,保持对JNIEnv环境的全局引用 线程创建部分,它将侦听套接字连接以接受事件并注入GetEvent函数。 回调函数 在接收到事件时执行GetEvent()后,我的JVM在AttachMon

  • 下面是一些代码: Java代码: 上面所有的工作都很好,但是C++试图做同样的事情,却做不到。(注意:我需要本机库中的类作为类,而不是独立的静态调用) 更新了MyClass::SomeCall定义:

  • 问题内容: 我在这里需要一些建议或一些解释。我有一个jquery ajax调用, 一切正常。我的回调响应正确触发。但是,我注意到的是,即使我的呼叫返回成功状态200,每次也会触发我的回调。在上面的回调中,我看到该对象是200。 谁能解释什么地方出了问题或这里发生了什么?回调应该仅在我有404或非200响应时触发。我的假设正确吗? 谢谢。 问题答案: 错误回调将在http错误时调用,但 如果响应上的

  • 我试图使用javamail示例包中的ShowMsg.java读取gmail消息,但在运行时不断出现此错误。虽然程序编译得很好。 以下是错误消息: 我运行的命令是,编译它的命令是。javax.mail.jar包含在lib文件夹中 这是一些更短的替代代码,并得到相同的错误:

  • 问题内容: 我需要使用“接口”在Java中实现回调函数。我已经将应用程序部分写为 m_GetSizeInterface是一个包含回调函数GetSize的接口。此GetSize方法在应用程序中被覆盖。在JNI中,我需要调用具有原型的CPP函数 如何将此GetSize作为参数传递给JNI中的MyCPPFunction?请帮忙 问题答案: 这里的复杂之处在于您要调用本机C ++代码,而您又要调用Java

  • 我正在编写一些代码,以获得一个派生线程来从C调用静态Java方法。 如果放置在来自Java的本机调用中,而不是来自附加了JNIEnv的线程,则调用该方法的位可以正常工作。 我设置了一个JavaVM*如下: 这确实会被调用。 然后生成另一个线程,并从该线程执行以下操作: attachMoney tThread返回0。 GetStaticmethod虽然爆炸与以下错误: 我只是不知道我做了什么来打乱它