当前位置: 首页 > news >正文

java jni 编程

最近要学习Java JNI 编程.

我使用的是的windows系统。装了一个cygwin.

根据 《JNI 编程规范和指南》. 文件网址: http://wenku.baidu.com/view/b52878ffaef8941ea76e0531.html 

第一步: javac  HelloWorld.java 生成了 HellWorld.class    // 在cygwin 下执行命令

第二步:javah -jni HelloWorld  生成了HelloWorld.h      // 在cygwin 下执行命令

第三步:实现HelloWorld.c 这个文件   //用文本编译器写上代码

第四步:生成HelloWorld.dll 这个文件,由于是在windows 系统所以要生成.dll文件。而不是 libHelloWorld.so 文件。

一开始,我一直在cygwin下用 gcc -shared HelloWorld.c libHelloWorld.so 生成了 libHelloWorld.so ,但在运行时

执行 java HelloWorld 时

总是出下面的错误,我以为是cygwin 下是找HelloWorld.so的,其实是找HelloWorld.dll的.

java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1700)
        at java.lang.Runtime.loadLibrary0(Runtime.java:841)
        at java.lang.System.loadLibrary(System.java:1067)
        at HelloWorld.<clinit>(HelloWorld.java:7)
Error: Could not find the main class.
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"

老说链接不了本地方法的库.

于是我就用,命令行编译生成 HelloWorld.dll文件。但是老是编译通不过,生成不了HelloWorld.dll于是。

我就用vc6 生成了 Helloworld.dll.

打开VC6,: 文件--->新建-->win32 Dynamic-Link Library  选择新建一个动态链接库

工程名: HelloWorld

路径名:为你的代码路径

然后新建一个空工程.完成后,把前面的 HelloWorld.c 和HelloWorld.h文件加入你的工程

另外由于你的HelloWorld.c中包含了 <jni.h>.编译是会说找不到这个头文件,你需要做如下设置

project setting-->c/C++/  在 分类:下拉列表中选择  预处理器

然后 在附加包含路径那里,加入:

你的jdk安装路径中的 include 路径,和include/win32 这两个路径,那里面有 <jni.h>这个头文件

以及<jni_md.h> 

我的加入路径如下:

C:\Java\jdk1.7.0\include,C:\Java\jdk1.7.0\include\win32  

编译成功后,会生成Helloworld.dll. 在你的工程目录的 debug文件夹中。

然后把HelloWorld.dll 拷贝到你的 HelloWorld.class所在的目录。记住他们要在同一个目录下然后执行:


java HelloWorld  这样就可以运行了.

或者

java -Djava.library.path=. HelloWorld  //这条命令先是指定 java本地库的搜索路么为当前路么,然后运行 HelloWorld 这个类.


代码分别如下:

----- HelloWorld.java 文件----内容如下 :

class HelloWorld{
private native void print();
public static void main(String[]  args){
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}

------HelloWorld.h-----内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */


#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    print
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_print
  (JNIEnv *, jobject);


#ifdef __cplusplus
}
#endif
#endif




-----HelloWorld.c----如下:

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)  
{
printf("Hello World!\n");
return;
}  



 

相关文章:

  • 使用PLSQL导入导出数据库
  • 高德地图引入库错误std::string::find_first_of(char const*, unsigned long, unsigned long) const...
  • java中 Map 遍历方法
  • 为什么Java的string类要设成immutable(不可变的)
  • C++ STL算法系列1---count函数
  • C++静态变量内存分配,编译阶段,解密
  • zabbix +监控ftp+邮件报警
  • [ZT] 浙江大学校长杨卫院士:研究生导师“十戒”
  • Liferay 中部署portlet的细节窥探
  • 解决思科认证学员与高校网络及信息安全专业实验限制的解决方案
  • WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
  • HDU 3920 Clear All of Them I(DP + 状态压缩 + 贪心)
  • 美化代码的15个代码语法高亮工具
  • 异常的概念和Java异常体系结构
  • 解决ftp不支持软连接
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java,console输出实时的转向GUI textbox
  • JavaScript设计模式之工厂模式
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js正则,这点儿就够用了
  • k个最大的数及变种小结
  • LeetCode18.四数之和 JavaScript
  • Logstash 参考指南(目录)
  • uva 10370 Above Average
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • yii2中session跨域名的问题
  • 百度小程序遇到的问题
  • 给第三方使用接口的 URL 签名实现
  • 记录一下第一次使用npm
  • 解决iview多表头动态更改列元素发生的错误
  • 开源地图数据可视化库——mapnik
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 微信小程序设置上一页数据
  • 智能网联汽车信息安全
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #etcd#安装时出错
  • #include
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $forceUpdate()函数
  • (20050108)又读《平凡的世界》
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (java)关于Thread的挂起和恢复
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)windows配置JDK环境
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (一)VirtualBox安装增强功能
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • ****Linux下Mysql的安装和配置
  • 、写入Shellcode到注册表上线
  • .a文件和.so文件