通过 JNI 从 C++ 调用返回字符串的 java 函数 [重复]

2024-02-10

可能的重复:
如何在 C++ 应用程序中访问 Java 方法 https://stackoverflow.com/questions/992836/how-to-access-the-java-method-in-a-c-application

假设我有一个像这样的 Java 类:

class MyClass
{
  String value = "a string value";

  String getValue()
  {
    return value;
  }
}

我花了几个小时尝试实现一个调用 Java 函数并返回字符串的 JNI 函数。 有人可以通过一个片段向我展示如何使用 JNI 从 C++ 调用“getValue”函数,并从“MyClass.h”中获取具有 String 变量值的 jstring 变量。

// C++

jobject result;

jMethodID method_getValue = m_env->GetMethodID(native_object,"getValue","()Ljava/lang/String;");

result = m_env->CallObjectMethod(native_object, method_getValue);

jMethodID method_getValue = m_env->GetMethodID(native_object,"getValue","()Ljava/lang/String;");

这里,native_object应该是MyClass的类定义对象(jclass)

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

而到这里:

result = m_env->CallObjectMethod(native_object, method_getValue);

NativeType CallMethod(JNIEnv *env, jobject obj, jmethodID 方法ID, ...);

您的 CallObjectMethod 需要 MyClass 中的对象作为第一个参数,而不是 jclass。http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html

所以这里的任何一个调用都是错误的......

可能是 getMethodID...你绝对应该检查那里的 NULL 。

cheers,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 JNI 从 C++ 调用返回字符串的 java 函数 [重复] 的相关文章

  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐

  • 在 Google Colab 上训练模型时,我应该保持连接吗?

    在 Google Colab 上训练用于对象检测的数据集模型 Darknet 时 我是否需要保持与 Colab 和互联网的连接 当训练在 Colab 上进行并连接到我的驱动器时 这里的权重文件将保存在我的谷歌驱动器文件夹中 那么 我可以断开
  • R中的参数传递机制

    下面的函数用于将一个序列相乘1 x by y f1 lt function x y return lapply 1 x function a b b a b y 好像a用于表示序列中的元素1 x 但是不知道如何理解这个参数传递机制 在其他
  • java.io.File 中 mkdir() 和 mkdirs() 之间的区别

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 谁能告诉我这两种方法之间的区别 file mkdir file mkdirs mkdirs 还创造了父目录在这个路径中File代表 jav
  • 从常规 ES6 类方法调用静态方法

    调用静态方法的标准方法是什么 我可以考虑使用constructor或者使用类本身的名称 我不喜欢后者 因为它感觉没有必要 前者是推荐的方式 还是还有其他方式 这是一个 人为的 示例 class SomeObject constructor
  • jQuery - keydown / keypress /keyup ENTERKEY 检测?

    尝试让 jQuery 检测 Enter 输入 但检测到空格和其他键 未检测到 Enter 下面有什么问题 entersomething keyup function e alert up var code e keyCode e keyCo
  • RxJS 运算符在事件流中等待安静期,但在事件流繁忙的情况下不会永远等待

    场景 我有一个事件流 每个事件都应该导致信息的更新显示 事件流来自 websockets 显示在 highcharts 图表中 但这并不重要 出于性能原因 我不想为每个事件触发 UI 更新 我宁愿做以下事情 当我收到一个事件时 我只想更新
  • 帮我用“apply”函数替换 for 循环

    如果可能的话 我的任务是找到用户连续参与游戏的最长连续天数 我没有编写 sql 函数 而是选择使用 R 的 rle 函数来获取最长的条纹 然后用结果更新我的数据库表 附加的 数据框是这样的 day user id 2008 11 01 20
  • 日语字符的正则表达式

    我正在 Struts 中进行国际化 我想为日语和英语用户编写 Javascript 验证 我知道英语的正则表达式 但不知道日语用户的正则表达式 是否可以为两个用户编写一个基于 Unicode 进行验证的正则表达式 请帮我 下面是一个正则表达
  • Prolog 中的递归 - 寻找城市之间的路径

    我正在努力完成底部的练习我发现自己对第三点完全困惑 我们获得以下旅游信息知识库 byCar auckland hamilton byCar hamilton raglan byCar valmont saarbruecken byCar v
  • 使用 Zombie.js 验证 Qunit 的结果

    我正在进行测试驱动开发Qunit http qunitjs com 当创建一个新函数时 我为它编写测试 创建函数 重新加载页面 如果所有测试都通过 我就继续 虽然一开始工作正常 但之后它开始成为一个耗时的过程一段时间 因为所有测试都需要几秒
  • 如何在另一个线程上运行阻塞代码并使http请求立即返回

    我们开始了一个新项目Quarkus and Mutiny 并使用 Quarkus 创建了一堆端点 Funq 到目前为止一切都运行良好 现在我们想要在一个端点中处理一些非常耗时的事情 我们期望的是 一旦用户单击按钮从前端发送 http 请求并
  • Javascript 中的递归函数和深度跟踪

    我正在用 JS 编写一个递归函数 但遇到了一些麻烦 让我们从这个非常基本的函数开始 function traverse thing if typeof traverse depth undefined traverse depth 1 el
  • Python 中的“For”循环行为

    为什么下面的简单循环没有保存i在循环的末尾 for i in range 1 10 print i i i 3 以上打印 1 2 3 4 5 6 7 8 9 但它应该打印 1 4 7 for sets i每次迭代 到被迭代对象的下一个值 无
  • 运行 `yo angular` 时出现很多“npm ERR!”

    我正在努力让 Yeoman 工作 但是却是一堵又一堵墙 感谢上帝的 stackoverflow 和所有好心人的帮助 无论如何 我一直在努力奔跑yo angular 但我得到了一堆npm ERR 包括 npm ERR Please try r
  • Plotly:如何在 x 轴上绘制月份和日期? (忽略年份)

    我正在尝试绘制时间序列数据 并希望 x 轴只是月份和日期 Plotly 要求格式为yyyy mm dd 但我有几年来数据集的每日平均值 所以我只想绘制mm dd在 x 轴上 当我发送一个日期时间时mm dd它假设mm成为那一年 我可以让它绕
  • 自定义适配器 getView 方法在位置 0 处频繁调用

    我有一个 GridView 绑定到自定义 ArrayAdapter 派生
  • Rails jquery 日期选择器时区

    我在尝试使用 Rails 处理 JQuery 日期 时间选择器中的时区时遇到问题 日期选择器正确显示当地时区 问题出现了 当我将所选日期保存到数据库中时 rails 会将其保存为 UTC 时间 即使该时间位于客户端的时区中 当我尝试将时间转
  • 如何包含 头文件并使用 std::numbers

    在 gcc 和 g 版本 11 1 0 上运行 每次我运行这段代码时 我都会遇到问题 它说 std numbers 未声明 我尝试跑步g randomCodeWhileReading cpp o main std c 20在我的终端 我运行
  • 具有大数据集的 DC 和交叉过滤器

    我一直在研究 dc 和 crossfilter js 目前有一个包含 550 000 行 大小为 60mb csv 的大型数据集 并且面临着很多问题 例如浏览器崩溃等 因此 我试图了解 dc 和 crossfilter 如何处理大型数据集
  • 通过 JNI 从 C++ 调用返回字符串的 java 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 C 应用程序中访问 Java 方法 https stackoverflow com questions 992836 how to access the java method in a c