V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
andychen20121130
V2EX  ›  问与答

jni 调用 Java 方法。

  •  
  •   andychen20121130 · Nov 2, 2018 · 1939 views
    This topic created in 2741 days ago, the information mentioned may be changed or developed.

    在 native 使用了线程。使用 pthread_join( pthread[j], &varResult);等待线程结束 。这里用 varResult 接收处理完的结果。然后把它传到 java 层。我在 java 层定义了一个静态方法 void callJavaMethod( JNIEnv env, jobject thiz,void data);

    这个是 native 层调用 java 的方法会出错。大神帮忙看一下。

    void callJavaMethod( JNIEnv env, jobject thiz,void data){ // 先找到要调用的类 jclass clazz = env -> FindClass("com/example/administrator/myopencv/MainActivity");

    if (clazz == NULL){
        printf("find class MainActivity error !");
        return;
    }
    // 获取 java 方法 id
    // 参数二是调用的方法名,  参数三是方法的签名
    jmethodID id = env -> GetStaticMethodID(clazz, "methodCalledByJni", "(Ljava/lang/String;)V");
    
    if (id == NULL){
        printf("find method methodCalledByJni error !");
        return;
    }
    jstring msg = env->NewStringUTF((const char*)data);
    
    // 开始调用 java 中的静态方法
    env -> CallStaticVoidMethod(clazz, id, msg);
    

    }

    报错提示:JNI DETECTED ERROR IN APPLICATION: JNI FindClass called with pending exception 'java.lang.IllegalArgumentException' thrown in unknown throw location in call to FindClass

    2 replies    2018-11-02 10:52:35 +08:00
    undeflife
        1
    undeflife  
       Nov 2, 2018
    GetStaticMethodID 的地一个参数不应该是 env 吗?

    jmethodID GetStaticMethodID(JNIEnv *env, jclass clazz,
    const char *name, const char *sig);

    https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#GetStaticMethodID
    andychen20121130
        2
    andychen20121130  
    OP
       Nov 2, 2018
    @undeflife 可以不需要。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2846 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:58 · PVG 21:58 · LAX 06:58 · JFK 09:58
    ♥ Do have faith in what you're doing.