java - 从 C++ 方法调用 Java 函数

标签 java android c++ java-native-interface

我在从 C++ 方法调用 Java 函数时遇到问题。以下是我正在做的事情

我的java类

package com.q.IT;

public class Carv {

public boolean isValidRatio(float a, float b)
{

       //do something
       return True;
    }
}

我的C++方法

void printAndValidateResults() {

    JNIEnv *env;
jclass ItClass =env->FindClass("com/q/IT/Carv");
jobject object = env->AllocObject(ItClass);
jmethodID isValidRatioID = env->GetMethodID(ItClass,"isValidRatio", "(FF)Z");
    bool retVal = env->CallBooleanMethod(object, isValidRatioID, 1.0f,2.0f);
}

出现以下错误

06-23 23:35:03.459: A/libc(15758): Fatal signal 11 (SIGSEGV) at 0xe92d43a4 (code=1), thread 16113 (AsyncTask #2)

如您所见,C++ 方法是普通的 C++ 方法,而不是类似

JNIEXPORT 无效 JNICALL Java_com_q_IT_blahblah(JNIEnv *,jobject) {

,我想保持这种状态。崩溃发生在这里

jclass ItClass =env->FindClass("com/q/IT/Carv");

我不太确定将 *env 初始化为什么。

最佳答案

例如,检查 Creating a JVM from C .它显示了创建 JVM 和调用方法的示例过程。如果 JVM 已经存在;例如你的C程序被Java程序调用(回调情况),你可以缓存JNIEnv*指针。

作为一个建议,请小心缓存从 C/C++ 指向 JVM 的指针,关于您可以缓存的内容以及稍后可以调用的内容涉及一些语义。

来源:How to call Java functions from C++?

关于java - 从 C++ 方法调用 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269631/

相关文章:

java - 与 volatile 、不可变对象(immutable对象)及其用于实现同步相关的疑问

android - 即使在减小启动画面尺寸后, ionic 应用程序尺寸也不会减小

android - React Native 获取访问 token 社交网络

java - 如何在android中将 View 放在导航栏后面?

c++ - @executable_path 不工作

java - 如何验证页面上的所有元素?

java - 在 Java 中访问 JSON 嵌套值的动态方式

java - Spring HttpMessageConverter 根据@ExceptionHandler响应内容类型

c++ - 在 C++ 中声明一点

c++ - 与 .so 文件链接 (webkit)