好了,一堆废话后还是要进入主题,所谓JNA就是“Java Native

Access”的缩写。说白了就是Java直接访问/调用本地动态库。最好的入门方法就是从JNA的官网开始。

0. 备注:

操作系统:Ubuntu-10.10

工作用户:root

JDK版本:1.6&1.7

开发环境:eclipse

实验目的:下载安装JNA,并测试JNA调用本地C动态库的printf函数。

1. 下载jna.jar

到JNA官网下载最新版本的“jna.jar”,当前的最新版是3.4.0。链接如下:

2. 安装jna.jar

将jna.jar文件移动到JKD的安装目录的子目录,我的是:/opt/java/jdk1.7.0/lib。这个jna.jar文件也可以放在任何目录,比如你正在开发的Java工程目录。

3. 创建eclipse-java工程

启动eclipse,并新建一个Java工程JnaTest。

4. 添加Java源文件

在JnaTest工程中添加Java源文件HelloJna.java,并在源文件中输入如下代码:

package myjava.jna.test;

import com.sun.jna.Library;

import com.sun.jna.Native;

import

com.sun.jna.Platform;

public class HelloJna

{

//定义接口CLibrary,继承自com.sun.jna.Library

public interface CLibrary extends Library

{

//定义并初始化接口的静态变量

CLibrary

Instance=(CLibrary)Native.loadLibrary((Platform.isWindows()?"msvcrt":"c"),CLibrary.class);

//printf函数声明

void printf(String format,

Object... args);

}

public static void main(String[] args)

{

//调用printf打印信息

CLibrary.Instance.printf("Hello, JNA!\n");

}

}

提示:上述代码主要是参考JNA官网的例程。

5. 配置工程引用jna.jar库

5.1

在eclipse左边的Workspace项目管理器中右击项目JnaTest,选择属性“Properties”,如图5-1所示。

图5-1:配置项目属性

5.2 点击“Properties”后,在弹出的“Properties for

JnaTest”对话框中点击左边的“Java Build

Path”,然后再点击对话框中间的“Libraries”选项卡,最后点击右边的“Add External

JARs...”按钮,如图5-2所示。

图5-2:为工程添加扩展的JAR文件

5.3 在弹出的“JAR

Selection”对话框中找到第2步安装的jna.jar文件,点击“确定”按钮,如图5-3所示。

图5-3:选择jna.jar文件

6.

编译并运行程序

运行结果如图6-1所示。

图6-1:程序运行结果

7.

JNA编程基本语法解析

7.1 自定义一个接口,该接口继承(扩展)自com.sun.jna.Library接口,如上面示例代码中的CLibrary接口。

7.2

在自定义的接口中声明将要调用的函数原型,这些函数原型必须要在即将加载的动态库中有对应的实例。如上面示例代码中的printf函数声明。如果是在微软

的Windows环境下,该函数存放在msvcrt.dll动态库中;如果是在Linux环境下,该函数存放在libc.so动态库中。

7.3

在调用函数之前,先将接口实例化,并调用Native.loadLibrary对接口的实例初始化。如上面示例代码中的Instance实例初始化。

7.4 在上面的操作都正常完成后,即可在有需要的地方调用对应的C/C++函数。

java对jna的配置选项_JNA编程之一:入门 | 学步园相关推荐

  1. java spring context_java将对象注册到spring context中 | 学步园

    很多时候需要从spring中取出相应的对象,很多时候又需要将对象注入到spring context中. 小卒碰到了这样的问题.在构件中有DAO. 其他构件需要复用这个DAO,但是连接配置各不相同,并且 ...

  2. java 调用cpp_java jni 调用cpp文件中的方法 | 学步园

    这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...

  3. greenplum配置高可用_GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 | 学步园...

    GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 master镜像是通过把primary master对应的standby master放置到不同的物理主机实现的.正常 ...

  4. java web定时器_java的web项目中使用定时器 | 学步园

    之前接触过程序中的定时任务,但是没去自己亲自尝试过.终于这次抽空搞了一下.(一定要自己去操作,才能长经验,光看到过是没用的) 以下是两种方法,我使用的是监听的方法. JAVA WEB定时器,定时器的启 ...

  5. java 修改ini文件_java读取和修改ini配置文件 | 学步园

    /* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...

  6. java的connect和http_java发起HttpURLConnection和HttpsURLConnection请求 | 学步园

    /** * 发起https请求并获取结果 * * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET.POST) * @param outpu ...

  7. java socket超时时间_java中socket 默认超时时间 | 学步园

    MS:永远吧 Java代码 connect publicvoidconnect(SocketAddress endpoint, inttimeout) throwsIOException Connec ...

  8. java计数器策略模式_策略模式与外观模式 | 学步园

    1.策略 :定义不同的 2. 例子:随机生成宠物,并统计各种宠物生成数量. a) 抽象类:PetCreator,用于随机生成宠物. package context; import java.util. ...

  9. java biginteger使用_java中的BigInteger的基本用法 | 学步园

    注 : 为了更好的理解BigInteger类,特提供了一篇关于BigInteger的题目及本人的解答,感兴趣的朋友可以到我的博客看一下 import java.math.BigInteger; pub ...

最新文章

  1. TensorFlow 2.7 正式版上线,改进 TF/Keras 调试,支持 Jax 模型到 TensorFlow Lite转换
  2. Ubuntu图形界面配置开机自启动
  3. 深究AngularJS——排序
  4. 三维空间长度温度数量_风电叶片模具水循环温度控制机及其智能化控制解析
  5. 【转】ABP源码分析十:Unit Of Work
  6. 【JSON】JSON入门详解(二)
  7. 逆势增长 百度App日活破2亿
  8. 电脑键盘上每个键的作用_键盘F键有什么作用 键盘F键作用介绍【详解】
  9. oracle对象之触发器
  10. Google是如何识别原创文章的,以及外链建设意见
  11. win python 判断 所有 子进程 结束_python 多进程如何终止或重启子进程?
  12. Snort:Barnyard2+MySQL+BASE 基于Ubuntu 14.04SNORT
  13. 记一次USB声卡设计开发
  14. mvc java框架_java常用MVC框架说明与对比
  15. Flink菜鸟教程(二)——时间概念
  16. 数字信号处理基础----FM的调制与解调(1)
  17. Python爬虫入门-小试ImagesPipeline爬取pixabay和煎蛋之为什么是‘404’
  18. 主流深度学习框架对比
  19. 客运行业发展现状分析
  20. 利用scrapy批量下载个人简历

热门文章

  1. Machine Learning课程中的常见单词的含义
  2. spyder ctrl + 鼠标左键点击函数 无法跳转
  3. [转]如何写好学术论文
  4. HtmlUnit初探
  5. Altium AD20删除机械层MECH
  6. ROS学习笔记六:理解ROS服务和参数
  7. JS小技巧 ----- 将类数组 / 字符串转为数组的几种方式
  8. 【Angular 4】响应式编程
  9. Linux 死机时抢救措施
  10. remote connect openshift mysql