使用 JNI 从 C++ 调用 JAVA 方法,无参数

2024-01-12

请耐心听我说,我是一名 iPhone 开发人员,而整个 Android 这让我有点困惑。

我有一些从 cocos2d-x CCMenuItem 调用的 C++ 方法。因此,根据文档,我无法发送任何参数。

我需要使用 android 浏览器打开一个 url,这将要求我调用 JAVA 函数来启动新意图。

我知道我需要创建一个虚拟机,但是下面的代码给了我错误:

jni/../../Classes/OptionsScene.cpp:184: 错误: 'JNI_CreateJavaVM' 是 未在此范围内声明

我正在看这个线程:在 Android 中从 C++ 调用 java 方法 https://stackoverflow.com/questions/5198105/calling-a-java-method-from-c-in-android

但他用的是参数,我做不到。而且我不知道这些代码在他的代码中的什么位置,可以让我自己制作它们。

我不知道“查找类”方法中的字符串应该是什么。 另外,我认为在我需要调用的每个方法中创建一个新的虚拟机实例是非常糟糕的。我将如何创建一个作为单例以供全面使用?

这是我的菜单项调用的 C++ 代码:

#include <jni.h>
...
JavaVM *vm; // Global
...
void OptionsScene::website(){
JNIEnv *env;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = 1;

jint result = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args); // This line still errors

jclass clazz = env->FindClass("com/prndl/project/WebExecute");
jmethodID method = env->GetMethodID(clazz, "website", "(Ljava/lang/String;)V");
env->CallVoidMethod(NULL,method);

vm->DestroyJavaVM();

这是我需要调用的 JAVA 方法:

public class WebExecute extends Activity{
    public void website(){
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
        startActivity(browserIntent);
    }
}

老实说,我正在努力解决这个问题,非常感谢任何帮助。谢谢。


如果您正在研究如何调用不接受任何参数的 java 方法,则格式为jmethodID mid = env->GetStaticMethodID(myClass, "myMethod", "()V");

()这就是你告诉它不接受任何参数的方式。

V说它返回无效。Ljava/lang/String;如果该方法返回类型的对象,则应使用String.

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

使用 JNI 从 C++ 调用 JAVA 方法,无参数 的相关文章

  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 按名称查找视图

    是否可以通过名称而不是 id 来查找视图 findViewById R id someView 但我想做这样的事情 findViewByName someView 在处理 xml 时 您必须通过标识符查找视图 但是您可以使用以下方式查找标识
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 如何使 tablayout 文本大小相等?

    这就是我所做的 我为文本创建了一种样式
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT
  • OpenGL ES 2.0 屏幕闪烁

    我面临着一个大问题 我正在使用带有 Android 4 0 3 的 Transformer tf101 选项卡 我的应用程序使用自定义 OpenGL ES 2 0 表面 我正在用纹理渲染多个平面 该纹理大约发生变化 每秒 20 次 并通过传
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Android:获取最新意图

    如何获取发送到活动的最后一个意图 的文档onNewIntent 建议我需要做这样的事情 class MyActivity public void onNewIntent Intent intent setIntent intent reac
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 如何判断KeyPress事件中是否按下了Backspace?

    This http msdn microsoft com en us library system windows forms control keypress aspx http msdn microsoft com en us libr
  • Netbeans:如何在 NullPointerException 上中断?

    在 netbeans 中调试 java 程序时 我希望调试器停止在导致 NullPointerException 的行上 以便我可以检查那里的变量 我相信我必须在该行设置的断点上使用条件 但条件的语法是什么 谢谢您的帮助 转到调试 gt 新
  • 如何修复 Github Pages 上的 HTTP 404?

    Here https github com roine p1 tree gh pages是我的 GitHub 存储库gh pages分支 一切看起来都不错 我有我的index html 我的 CSS JS 和图片文件夹 但是当我访问http
  • chrome 和 firefox 中的图像损坏在 safari 中正常工作

    我的徽标在 Safari 中显示 但在 Chrome 中显示为损坏的链接 并且在 Firefox 中根本不显示 a href index html img src images logo 01 png a 我已经重新上传了很多次 甚至尝试过
  • 合并包含 Scala 中公共元素的集合的集合

    我想在 Scala 中实现一个函数 给定一组 Int 集合 该函数将合并任何包含一个或多个公共元素的包含集合 例如 给出 def mergeSets sets Set Set Int Set Set Int val sets Set Set
  • 将 C# 应用程序的引用添加到未使用 /clr 编译的 DLL?

    我正在使用 Visual Studio 2008 构建一个包含两个项目的解决方案 一个 C 控制台应用程序和一个 C DLL 我希望应用程序使用 P Invoke 从 dll 调用函数 因此 我尝试添加 dll 作为对 C 应用程序的引用
  • 创建日历事件时返回奇怪的错误消息

    我正在使用 Node js Google 客户端 API 创建一个 google 日历活动 我请求使用以下对象通过该活动创建一个会议 var conferenceData createRequest requestId uuid confe
  • 安卓。 getHistorySize 和 getHistoricalX/Y

    我已经覆盖了onTouchEvent 方法在我的View类 并试图处理EventMotion ACTION MOVE 我使用以下代码 if event getAction MotionEvent ACTION MOVE historySiz
  • 是否可以在两台机器上使用相同的 ssh 私钥/公钥对来访问 git 存储库?

    我最近设置了一个内部 git 存储库服务器 并安装了 gitosis 作为管理工具 并将其启动并运行 只读访问可通过 git 协议获得 写访问可通过使用 ssh 公钥的 gitosis 获得 我有一位开发人员已被授予使用在其桌面工作站上生成
  • 如何指定自定义 libc++

    我已经构建了 libc 并且想在编译程序时使用它 所以我有类似的东西 clang stdlib libc libc so main cpp 但这不起作用 在构建应用程序时如何使用我的自定义构建的 libc 此信息来自关于 libcxx 的
  • iPhone TCP 连接

    我想在iPhone和PC之间建立tcp连接 在 PC 上 QTspServer 正在运行并工作 已与其他客户端应用程序进行测试 这是我在 iPhone 上使用的连接方法 IBAction connectToServer id sender
  • 为什么没有像 MSG_WAITALL 这样的标志用于发送?

    旗帜MSG WAITALL可用于recv 这要求recv阻塞直到满足完整的请求 这意味着recv直到达到请求的数据量 由参数指定 才会返回len 已收到 除非发生错误或连接已关闭 为什么这样的标志不适用于send也 我认为这对于发送非常有用
  • 最好的基于 jquery 的灯箱/弹出对话框?

    我正在寻找一个基于 jquery 的弹出对话框 我们将使用它 显示静态内容页面 使用条款等 联系我们页面 已经使用 jquery 表单插件进行 ajax 提交 显示全尺寸的照片缩略图 有人可以推荐一款可以满足上述所有要求并且相当轻量级且易于
  • 如何确定 EventLog 是否已存在

    我正在使用以下行创建新的事件日志 new eventlog LogName Visual Studio Builds Source Visual Studio 我想每次都运行它 因为如果我从新计算机运行构建 我仍然希望查看事件日志 问题是
  • asp.net webforms ajax 更新 gridview

    我们有一个包含大量信息 100 行或行和列 的网格视图 我们需要提高其性能 目前 为了解决一些性能问题 我们使 gridview 没有编辑模板 而是双击一个单元格将弹出一个可用选项的下拉列表 该选项是使用 webmethods 检索并使用
  • jekyll:检查是否没有帖子

    如何查看帖子里是否没有帖子 posts folder 到目前为止 我已经尝试过 if site posts null p No posts yet p endif and if site posts nil p No posts yet p
  • 从 VB 转换为 C#

    我的任务是将解决方案从 VB 转换为 C 有 22 个项目和数百个类 所以我决定研究转换器 我最终选择了 SharpDevelop 这是一个带有转换器的 IDE 我在每个项目上都运行了它 并且有很多错误需要修复 但我应该能够检查它们并希望找
  • Sequelize 增量函数返回错误

    尝试增加我的数据库中模型实例的整数字段 这是相关代码 models Options findAll where PollId poll id name option to update then option gt option incre
  • 删除网址中的主题标签,刷新 f5 时出错(angularJs-cordova)

    我对 AngularJs 中的路由器有一些疑问 我使用了 Angular UI Router 但是当使用 locationProvider 删除 url 中的主题标签 时出现错误 如何解决这个问题 在我的模块中 config functio
  • 使用 JNI 从 C++ 调用 JAVA 方法,无参数

    请耐心听我说 我是一名 iPhone 开发人员 而整个 Android 这让我有点困惑 我有一些从 cocos2d x CCMenuItem 调用的 C 方法 因此 根据文档 我无法发送任何参数 我需要使用 android 浏览器打开一个