java对jna的配置选项_JNA编程之一:入门 | 学步园
好了,一堆废话后还是要进入主题,所谓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编程之一:入门 | 学步园相关推荐
- java spring context_java将对象注册到spring context中 | 学步园
很多时候需要从spring中取出相应的对象,很多时候又需要将对象注入到spring context中. 小卒碰到了这样的问题.在构件中有DAO. 其他构件需要复用这个DAO,但是连接配置各不相同,并且 ...
- java 调用cpp_java jni 调用cpp文件中的方法 | 学步园
这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...
- greenplum配置高可用_GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 | 学步园...
GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 master镜像是通过把primary master对应的standby master放置到不同的物理主机实现的.正常 ...
- java web定时器_java的web项目中使用定时器 | 学步园
之前接触过程序中的定时任务,但是没去自己亲自尝试过.终于这次抽空搞了一下.(一定要自己去操作,才能长经验,光看到过是没用的) 以下是两种方法,我使用的是监听的方法. JAVA WEB定时器,定时器的启 ...
- java 修改ini文件_java读取和修改ini配置文件 | 学步园
/* * ConfigurationFile.java * * Created on 2009年4月15日, 下午1:36 * * To change this template, choose To ...
- java的connect和http_java发起HttpURLConnection和HttpsURLConnection请求 | 学步园
/** * 发起https请求并获取结果 * * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET.POST) * @param outpu ...
- java socket超时时间_java中socket 默认超时时间 | 学步园
MS:永远吧 Java代码 connect publicvoidconnect(SocketAddress endpoint, inttimeout) throwsIOException Connec ...
- java计数器策略模式_策略模式与外观模式 | 学步园
1.策略 :定义不同的 2. 例子:随机生成宠物,并统计各种宠物生成数量. a) 抽象类:PetCreator,用于随机生成宠物. package context; import java.util. ...
- java biginteger使用_java中的BigInteger的基本用法 | 学步园
注 : 为了更好的理解BigInteger类,特提供了一篇关于BigInteger的题目及本人的解答,感兴趣的朋友可以到我的博客看一下 import java.math.BigInteger; pub ...
最新文章
- TensorFlow 2.7 正式版上线,改进 TF/Keras 调试,支持 Jax 模型到 TensorFlow Lite转换
- Ubuntu图形界面配置开机自启动
- 深究AngularJS——排序
- 三维空间长度温度数量_风电叶片模具水循环温度控制机及其智能化控制解析
- 【转】ABP源码分析十:Unit Of Work
- 【JSON】JSON入门详解(二)
- 逆势增长 百度App日活破2亿
- 电脑键盘上每个键的作用_键盘F键有什么作用 键盘F键作用介绍【详解】
- oracle对象之触发器
- Google是如何识别原创文章的,以及外链建设意见
- win python 判断 所有 子进程 结束_python 多进程如何终止或重启子进程?
- Snort:Barnyard2+MySQL+BASE 基于Ubuntu 14.04SNORT
- 记一次USB声卡设计开发
- mvc java框架_java常用MVC框架说明与对比
- Flink菜鸟教程(二)——时间概念
- 数字信号处理基础----FM的调制与解调(1)
- Python爬虫入门-小试ImagesPipeline爬取pixabay和煎蛋之为什么是‘404’
- 主流深度学习框架对比
- 客运行业发展现状分析
- 利用scrapy批量下载个人简历