什么是本机对象?

2023-12-29

什么是本机对象意味着我发现java具有与本机对象接口的对等类?


Java程序可以使用JNI http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html访问以本机代码(编译为机器代码的任何内容)实现的函数。与面向对象的本机代码接口需要一个 java 类,该类使用 jni 将方法调用从 java 转发到本机类的实例。该类是本机类的 java 对等体。

一个例子: 我们有 C++ 中的 print_hello 类,我们需要在 java 程序中使用它,为此我们需要在 java 中定义它的对等体。

原生类

  class print_hello{
  public:
      void do_stuff(){std::cout<<"hello"<<std::endl;}
  } 

java中的peer类

  class PrintHello{
    //Address of the native instance (the native object)
    long pointer;

    //ctor. calls native method to create
    //instance of print_hello
    PrintHello(){pointer = newNative();}

    ////////////////////////////
    //This whole class is for the following method
    //which provides access to the functionality 
    //of the native class
    public void doStuff(){do_stuff(pointer);}

    //Calls a jni wrapper for print_hello.do_stuff()
    //has to pass the address of the instance.
    //the native keyword keeps the compiler from 
    //complaining about the missing method body
    private native void do_stuff(long p);

    //
    //Methods for management of native resources.
    //

    //Native instance creation/destruction
    private native long newNative();
    private native deleteNative(long p);

    //Method for manual disposal of native resources
    public void dispose(){deleteNative(pointer);pointer = 0;}
  }

JNI代码(不完整)

声明的所有方法native需要本地 jni 实现。以下仅实现上面声明的本机方法之一。

//the method name is generated by the javah tool
//and is required for jni to identify it.
void JNIEXPORT Java_PrintHello_do_stuff(JNIEnv* e,jobject i, jlong pointer){
    print_hello* printer = (print_hello*)pointer;
    printer->do_stuff();
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是本机对象? 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • 如何设置 Bluez 5 在配对期间询问 PIN 码

    我使用 QDbus 实现了 org bluez Agent1 接口 我想设置一个固定引脚 我将提供给用户 以便验证所有配对请求 并在引脚错误时拒绝它们 代理功能应为 NoInputNoOutput 因为该项目将部署在没有键盘或显示器的 Ra
  • 使用 ruby​​ rough gem 访问 git 日志数据?

    对于 git 存储库中的给定文件 我想查找修改该文件的最后一次提交的 SHA 以及时间戳 在命令行中 该数据对于特定文件路径的 git log 是可见的 例如 git log n 1 path to file 使用 ruby 的 git g
  • 使用 URL 打开 JQuery 选项卡,并在选项卡单击时向 URL 添加哈希值

    我正在开发一个 Web 应用程序 并且使用 JQuery UI Tabs 插件来分离数据 如果我将鼠标悬停在每个选项卡上 我可以在屏幕左下角看到该选项卡的 URL 例如 testPage com tab1 或 testPage com ta
  • WooCommerce 3.0+ 更改管理订单日期列格式

    在 WooCommerce 中 我使用下面的代码来更改订单日期列的管理订单视图格式 Woocommerce show time on order add filter post date column time custom post da
  • ++Var 和 Var++ 之间的区别[重复]

    这个问题在这里已经有答案了 在编程中 特别是在 Java 中 以下之间有什么区别 int var 0 var and int var 0 var 这会对 for 循环产生什么影响 e g for int i 0 i lt 10 i for
  • 输入字段添加点击时焦点可见

    仅当用户通过键盘导航到元素时 我才尝试有选择地在输入字段上应用大纲 根据我的理解 执行此操作的方法是删除焦点上的轮廓 但应用焦点可见 如下所示 input focus outline 2px solid transparent input
  • 使用 grep 搜索文件中的十六进制字符串

    有谁知道如何使用 grep 或类似工具来检索文件中十六进制字符串的偏移量 我有一堆十六进制转储 来自 GDB 我需要检查字符串 然后再次运行并检查值是否已更改 我努力了hexdump and dd 但问题是因为它是一个流 我丢失了文件的偏移
  • SQL - 在 A-F 之间查找名称的条件

    简单的问题 我需要一个解决方案 以便我可以找到 A F 之间的名称 包括所有以 F 开头的名称 如果您使用 BETWEEN 或 A gt value 笔记 用户将看到 2 个文本框 其中接受用户可以输入的范围 用户细化在 F 边界中走多远
  • 三星互联网强制深色模式

    我的网站是在浅色模式下设计的 不应该对任何形式的深色模式做出反应 这适用于除 Samsung Internet 之外的所有网站 每当我在三星互联网上打开网站时 它都会自动将白色背景替换为深色背景 并将字母颜色更改为白色 有谁知道如何解决这一
  • 在 neo4j 中我可以获得更简洁的 REST api 响应

    有没有一种方法可以在 neo4j 中获得更简洁的 Rest api 响应 也许只有节点数据 在每个请求上发送所有额外的数据似乎有点浪费带宽 为什么所有元数据都包含在响应中 例如 基本 api url 在整个过程中都是重复的 一旦您 有了节点
  • 使用 Dapper 进行批量插入花费的时间比预期的要长

    看完之后本文 https www gamasutra com view news 170502 Indepth SQL Server High performance inserts php我决定仔细研究一下我使用 Dapper 的方式 我
  • MapKit 注释和用户位置

    我按照本教程制作了我的第一个应用程序 http icodeblog com 2009 12 21 introduction to mapkit in iphone os 3 0 http icodeblog com 2009 12 21 i
  • .NET - 如何创建一个类,使得只有一个其他特定类可以实例化它?

    我想要进行以下设置 class Descriptor public string Name get private set public IList
  • AES 加密 PHP 到 NodeJS?

    我正在将一个小项目从 PHP 迁移到 NodeJS 其中包含一小部分 AES 加密 由于 PHP 代码运行良好 因此如下 function decysek data app key output openssl decrypt base64
  • 在 ASP.net MVC 中良好且完整地实现 RSS 提要

    我在 ASP NET MVC 中见过一些 RSS Feed 的示例 例如this https stackoverflow com questions 11915 rss feeds in aspnet mvc 以及项目中的一些示例 例如 O
  • 为什么 C、C++ 和 LISP 在嵌入式设备和机器人中如此流行?

    嵌入式设备和机器人最需要的软件语言技能似乎是 C C 和 LISP 为什么最近的语言没有进入这些应用程序 例如 Erlang http www erlang org 似乎特别适合机器人应用程序 因为它使并发编程变得更容易并且允许代码热交换
  • SQLite 支持公共表表达式吗?

    SQLite 支持公共表表达式吗 我想运行这样的查询 with temp ID Path as select ID Path from Messages select from temp 从 Sqlite 版本 3 8 3 开始 SQLit
  • 使用maven时spring配置文件放在哪里

    我正在尝试解决我的配置文件问题 我有具有此结构的 Spring MVC 应用程序 我当前的结构 src main java java classes src main resources some properties files src
  • Capistrano 3:仅在分配了角色的服务器池中的单个服务器上运行任务

    我有 20 台充当 Web 角色的服务器 我有一项任务只需要对其中一个执行 因为更改会影响共享存储 我当前的解决方案是解决这个问题的黑客 如下 寻找更好的方法 我没有大量的 ruby 或 cap 经验 task checkout proje
  • 什么是本机对象?

    什么是本机对象意味着我发现java具有与本机对象接口的对等类 Java程序可以使用JNI http java sun com developer onlineTraining Programming JDCBook jni html访问以本