C++ 应用程序可以使用 JNI 加载 .jar 文件吗?

2023-11-23

感谢您查看问题。 我正在尝试使用 JNI 接口调用类文件中的 java 方法。反过来,被调用的类文件应该执行驻留在同一目录中的另一个 .jar 文件?我很难做到这一点,并且执行 .jar 文件失败。我的意思是我无法从 .jar 文件中提供的类 fuile 中获取结果。

任何人都可以解释一下,是否可以这样做,或者我应该寻找另一种选择?

代码是这样的:

class JNIInterface
{
private:
 JavaVMInitArgs vm_args;
 JavaVM *jvm;
 JNIEnv *env;
 long result;
 jmethodID mid;
 jfieldID fid;
 jobject jobj;
 jclass cls;
 int asize;
 char  JVMOptionString[20];
 char  className[20];
 char  methodName[20];
 JavaVMOption options[1];

public:
 JNIInterface(char* JVMOptionString)
 {
//  JavaVMOption options[1];
  options[0].optionString = JVMOptionString;
  vm_args.options = options;
  vm_args.nOptions = 1;

  vm_args.version = JNI_VERSION_1_6;
  vm_args.ignoreUnrecognized = JNI_FALSE;
 }
 void setClassName(char* className)
 {  
  result = JNI_CreateJavaVM( &jvm,(void **)&env, &vm_args);
  if(result == JNI_ERR ) 
  {
   printf("Error invoking the JVM\n");
   //return 0;
  }
  cls = env->FindClass("F2C");
  if( cls == NULL ) 
  {
   printf("can't find class F2C\n");
   //return 0;
  }

  env->ExceptionClear();
 }

 void setMethodName(char* methodName)
 {
  cout<<"----------  Function Name is "<<methodName<<endl;

  //----------  Integer Value with Parameter ----------------
  mid=env->GetStaticMethodID(cls, methodName, "([Ljava/lang/String;)V");
  if (mid != NULL)
  {
   env->CallStaticVoidMethod(cls,mid,"70");
  }
int main()
{
 JNIInterface JNIInterfaceObj("-Djava.class.path=C:\\MyPOC;C:\\MyPOC\\herong.jar");

    JNIInterfaceObj.setClassName("F2C");

 JNIInterfaceObj.setMethodName("main");
return 0;
}

.

//The java file which is calling jar files is - F2C.java

/**
 * F2C.java
 * Copyright (c) 2006 by Dr. Herong Yang, http://www.herongyang.com/
 */
import herong.TempratureConvertorBean;

public class F2C {

 public void test(String[] arg) {
  try {

   double f = 0.0;
   System.out.println("Inside test func:");
   TempratureConvertorBean b = new TempratureConvertorBean();

   if (arg.length>0) f = Double.parseDouble(arg[0]);
     b.setFahrenheit(f);
   double c = b.getCelsius();
   System.out.println("Fahrenheit = "+f);
   System.out.println("Celsius = "+c);
   System.out.println(b.getInfo());

  } 
}

public static void main(String[] arg) {
    F2C f2c = new F2C();
      f2c.test(arg);
  }
}  

这个F2C.java使用herong.jar文件

如果您有任何想法,请提出建议。 谢谢, 阿斯格


你的问题不太清楚,但我会给出一个笼统的答案......

在 Java 中,只有两种方法可以让 Java 查找 .jar 文件(最终归结为一种方法),那就是在类路径中指定 .jar 文件,或者创建一个类加载器查看该 jar 文件并将其添加到 Java 将使用的类加载器列表中。

当然,所有类路径都是 Java 在程序启动之前实例化和使用的一组类加载器。

因此,如果 JNI 程序需要 Java 开始查找其他 .jar 文件,JNI 程序需要进行 Java 调用(我现在没有查找)来设置新的类加载器并让 Java 开始使用它。

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

C++ 应用程序可以使用 JNI 加载 .jar 文件吗? 的相关文章

  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 为什么我不应该对不是由 malloc() 分配的变量调用 free() ?

    我在某处读到 使用它是灾难性的free删除不是通过调用创建的对象malloc 这是真的 为什么 这是未定义的行为 永远不要尝试它 让我们看看当您尝试时会发生什么free 自动变量 堆管理器必须推断出如何获取内存块的所有权 为此 它要么必须使
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 在类的所有方法之前运行一个方法

    在 C 3 或 4 中可以做到这一点吗 也许有一些反思 class Magic RunBeforeAll public void BaseMethod runs BaseMethod before being executed public
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 如何为Android创建触摸交互式图表[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我的应用程序需要图表 其中
  • 无法在 CentOS 上安装 PHP 包

    我在数字海洋托管的服务器上通过 yum 重新安装 PHP 时遇到问题 我安装了 PHP 5 4 但想要 5 6 我添加 启用了 remi 存储库 然后运行yum y remove php 然后尝试重新安装php 当我跑步时yum y ins
  • 连接谷歌电子表格中的日期和时间

    我有一个脚本可以将电子表格中的事件导入日历中 function caltest1 var sheet SpreadsheetApp getActiveSheet var startRow 2 First row of data to pro
  • 循环遍历最多 k 位为 ON 的整数的最佳方法是什么?

    我需要循环遍历所有最多有 k 位 ON 位 1 的 n 位整数 其中 0 目前我正在使用这个简单的算法 for x 0 to 2 n 1 count number of bits 1 in x if count lt k do someth
  • Google 自定义搜索 API 的 OAuth2 范围

    我已经创建了 CSE 需要以编程方式更新促销活动 这是在后端系统中完成的 因此身份验证过程中的用户交互不是一种选择 可以通过 HTTP 使用自定义搜索 API 来更新促销活动 此过程需要身份验证令牌 他们的文档说自定义搜索仅支持 Clien
  • jsf 中没有会话生成

    在JSP中 有一个属性session用于禁用请求中的自动生成会话 有没有办法在 JSF2 中做同样的事情 Thanks 为什么 因为我们有一个公共注册表单页面作为应用程序中的默认页面 这是一个非常简单的表单 每次人们 或机器人等 请求主页时
  • 如何使用 Java 流将两个数组合并到一个映射中?

    假设我们有以下两个数组 String keys new String a b c aa d b int values new int 1 2 3 4 5 6 通过将这两个数组合并到 HashTable 中 我们得到以下结果 pseudo c
  • jquery select 具有多个属性的元素

    好吧 我现在对 jquery 的选择器过程感到很困惑 是的 开始时很混乱 我的页面上有 2 个输入元素 我想删除其中一个 这是我的输入
  • 设备上运行的应用程序中的所有活动的列表

    如何获取设备上运行的应用程序中的所有活动的列表 例如 包括 pdf 生成和电子邮件活动 我可以使用以下代码检查活动 ActivityManager am ActivityManager this getSystemService ACTIV
  • gdb 不适用于 macos High Sierra 10.13.3

    我已经用brew安装了gdb 8 1 我也有 codesign gdb 和 gdbinit 如下所示 set startup with shell off 我已禁用 SIP 功能 csrutil status System Integrit
  • 单一职责原则与贫乏/丰富领域模型有何关系?

    目前正在对从另一个团队接管的东西进行一些代码审查 并对应用 SRP 及其与贫血或丰富域模型 由 Martin Fowler 定义 的关系存有疑问 富域模型的概念是拥有智能对象 不仅可以设置 获取其属性 还可以执行一些更复杂的业务逻辑 我想知
  • 重组文本列表出现“意外缩进”

    我没有成功使用 Restructedtext 获得简单的 3 级缩进列表 cat test rst Title aaaa aaaa2 aaaa2 aaaa3 aaaa aaaa Ok rst2html test rst gt tmp a h
  • 具有大量查询的node-postgres

    我刚刚开始使用node js 和postgres 使用node postgres 我尝试做的事情之一是编写一个简短的 js 来填充我的数据库 使用一个包含大约 200 000 个条目的文件 我注意到一段时间后 不到 10 秒 我开始收到 错
  • 无法识别的表达式“$first”

    我需要从数组中提取第一项并将其添加到它自己的对象中 所以我发现 first 正是这样做的https docs mongodb com manual reference operator aggregation first array ele
  • 指向数组的指针数组

    我是 C 编程新手 这是我的问题 我想将每个数组的第一个值存储在一个新数组中 然后将每个数组的第二个值存储在一个新数组中 依此类推 我可以声明指针数组 但我不知道如何使用它 拜托 我需要帮助 int main int t1 4 0 1 2
  • Pandas 0.19.2 read_excel IndexError:列表索引超出范围

    我正在寻找解析 Excel 电子表格 我决定使用 pandas 但立即就遇到了错误 我从下面的代码开始 但使用完整路径并尝试设置工作表名称 import pandas as pd table pd read excel ss 12 xlsx
  • 随机数生成器测试

    您将如何测试随机数生成器是否生成实际的随机数 我的方法 首先构建一个大小为 M 的哈希 其中 M 是素数 然后拿号码 由随机数生成器生成 并与M取模 并查看它填充了所有散列或仅填充了某些部分 这就是我的方法 我们可以通过可视化来证明这一点吗
  • 确定全局/根坐标中的 SVG 视口

    SVG 元素内实际可见的内容取决于其宽高比 viewBox值及其preserveAspectRatio value 例如 相同的 SVG 元素大小具有相同的viewBox值 下面的红色虚线 可以有不同的视口 下面以蓝色显示 具体取决于pre
  • TLS ECDHE-ECDSA-AES128-GCM-SHA256 的密钥生成要求

    我想知道 ECDHE ECDSA AES128 GCM SHA256 和 ECDHE ECDSA AES128 GCM SHA256 是否有最低密钥生成要求 我试图让 TLS 客户端和服务器使用上述算法之一相互连接 并不断收到 无共享密码错
  • C++ 应用程序可以使用 JNI 加载 .jar 文件吗?

    感谢您查看问题 我正在尝试使用 JNI 接口调用类文件中的 java 方法 反过来 被调用的类文件应该执行驻留在同一目录中的另一个 jar 文件 我很难做到这一点 并且执行 jar 文件失败 我的意思是我无法从 jar 文件中提供的类 fu