java结合jni调用本地方法_第1页
java结合jni调用本地方法_第2页
java结合jni调用本地方法_第3页
java结合jni调用本地方法_第4页
java结合jni调用本地方法_第5页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/

javaJNI开发

Jni程序开发的一般操作步骤如下:l

编写java中的调用类l

用javah生成c/c++原生函数的头文件l

c/c++中调用需要的其他函数功能,实现原生函数(原则上可以调用任何资源)l

将项目依赖的所有原生库和资源加入到java项目的java.library.path个人收集整理勿做商业用途l

生成java程序l

发布java应用和dll库Jni程序开发示例:步骤一:在HelloJNI工程里编写带有native声明的方法的java类packagehxzon.jni;publicclassTestJNI{static{

System.loadLibrary("hellodll");

}

publicnativevoiddispHelloWorld();

publicstaticvoidmain(String[]args){

newTestJNI().dispHelloWorld();个人收集整理勿做商业用途}}

编译产生hxzon/jni/TestJNI.class步骤二:控制台进入类文件(TestJNI.java)的所在的目录,例如xxx/src/hxzon/jni/。运行javah-classpath../../-jnihxzon.jni.TestJNI,类根目录产生hxzon_jni_TestJNI.h头文件。个人收集整理勿做商业用途注意类要包含包名,路径文件夹下要包含所有包中的类,否则会报找不到类的错误。classpath参数指定到包名前一级文件夹(hxzon的上一级)。个人收集整理勿做商业用途Tips:在使用javah生成头文件时,要注意类所在的路径,即包。如hello.java的package

:com.mypackage,该类所在的目录为:

|--java

|--com

|--mypackage

|--hello.java

那在dos中使用时要做按照如下的路径使用javah:

f:\java>javah

com.mypackage.hello

注意:要将包名com.mypackage加上个人收集整理勿做商业用途参考网址:/blog/static/1421431201082951815341/个人收集整理勿做商业用途hxzon_jni_TestJNI.h/*DONOTEDITTHISFILE-itismachinegenerated*/

#include<jni.h>

/*Headerforclasshxzon_jni_TestJNI*/个人收集整理勿做商业用途#ifndef_Included_hxzon_jni_TestJNI

#define_Included_hxzon_jni_TestJNI

#ifdef__cplusplus

extern"C"{

#endif

/*

*Class:

hxzon_jni_TestJNI

*Method:

dispHelloWorld

*Signature:()V

*/

JNIEXPORTvoidJNICALLJava_hxzon_jni_TestJNI_dispHelloWorld

(JNIEnv*,jobject);个人收集整理勿做商业用途#ifdef__cplusplus

}

#endif

#endif

步骤三:3.编写.c文件。注意方法名与头文件里的一样,否则通过编译,运行时出错。/**hxzon_jni_TestJNI.cpp

**Createdon:2009-8-25

*

Author:hxzon

*/#include<jni.h>#include"hxzon_jni_TestJNI.h"#include<stdio.h>JNIEXPORTvoidJNICALLJava_hxzon_jni_TestJNI_dispHelloWorld

(JNIEnv*env,jobjectobj)个人收集整理勿做商业用途{

printf("Helloworld!");

return;}步骤四:安装VC6,VC命令行下有一个编译器,名叫cl.exe(搭建cl编译器环境,来编译dll动态库)搭建cl编译器环境,重点在于cl编译器的环境变量配置配置!安装过程中勾选注册环境变量安装完成后在cmd命令窗口,随意的路径输入:cl/?会显示许多的帮助信息,则表示配置成功如果其他显示,配置失败,注意去环境变量里检查如下配置是否存在,不存在,自己添加上(一般来说安装过程中会自动配置好,自己配置的肯能会乱,所以大家注意让安装过程一切正常!本人是安装过程自动配置的)

include=D:\develop\MicrosoftVisualStudio\VC98\atl\include;D:\develop\MicrosoftVisualStudio\VC98\mfc\include;D:\develop\MicrosoftVisualStudio\VC98\include

lib=D:\develop\MicrosoftVisualStudio\VC98\mfc\lib;D:\develop\MicrosoftVisualStudio\VC98\lib

MSDevDir=D:\develop\MicrosoftVisualStudio\Common\MSDev98

path=D:\develop\MicrosoftVisualStudio\Common\Tools\WinNT;D:\develop\MicrosoftVisualStudio\Common\MSDev98\Bin;D:\develop\MicrosoftVisualStudio\Common\Tools;D:\develop\MicrosoftVisualStudio\VC98\bin

个人收集整理勿做商业用途步骤五:5.控制台进入类文件(TestJNI.java)的所在的目录,例如xxx/src/hxzon/jni/,注意,此时目录里至少需要包含个人收集整理勿做商业用途hxzon_jni_TestJNI.h"hxzon_jni_TestJNI.c两个文件,就是使用这两个文件生成c的动态库个人收集整理勿做商业用途cdxxx/src/hxzon/jni/cl–I”%java_home%\include”-I”%java_home%\include\win32”-LDhxzon_jni_TestJNI.c-Fehello.dll个人收集整理勿做商业用途或者cl-I"C:\ProgramFiles\Java\jdk1.6.0_14\include"-I"C:\ProgramFiles\Java\jdk1.6.0_14\include\win32"-LDhxzon_jni_TestJNI.c-Fehello.dll。

注意头文件路径用引号括起来,否则当路径有空格时出错。

以上命令的参数中,-I表示编译包含的额外目录,-LD表示产生dll,-Fe后面表示产生dll的名字,具体的参数可以自己用cl-help命令查看。

成功编译,会产生hello.dll,hello.lib,hello.exp三个文件,将hellodll.dll拷贝到工程的src的根目录下。(HelloJNI工程)不管我们拷贝到哪里,都要在环境变量的path里添加该hello.dll所在的目录。此处我们把hello.dlll拷贝到工程的src的根目录下。个人收集整理勿做商业用途参考资料:接下来是设置JVM的搜索路径,使其能够找到你的dll。JVM的搜索路径由java.library.path系统属性决定,其默认值为系统环境变量中的PATH内容。因此,可以通过修改PATH变量来达到设置java.library.path属性的目的(改变之后Eclipse需要重新启动),一般的方法是在PATH中加入dll所在文件夹的绝对路径。另一种方法是在Java命令的参数中加入“-Djava.library.path=dll所在文件夹的绝对路径”来设置(可以用;分开多个路径)。对于Eclipse开发环境上的应用程序,可以通过修改其启动参数,在VMarguments编辑框中加入前述参数。对于打包出来的Eclipse安装包,可编辑其启动目录下的application.ini(假设其启动文件为application.exe),在-vmargs后加入前述参数来设置java.library.path的值。需要注意的是,一旦JVM已经启动,则无法再修改java.library.path的内容了,也就是说,通过:个人收集整理勿做商业用途System.setProperty("java.library.path","c:\mylib");个人收集整理勿做商业用途这样的方式是无法达到目的的,因为该属性是只读的。Sun公司的论坛上曾经讨论过如何在代码中修改java.library.path的问题,结论是:不能通过代码修改!如果嫌"java-Djava.library

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论