Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展
Java程序的功能。
java native方法是指本地方法,当在方法中调用一些不是由java语言写的代码或者在方法中用java语言,直接操纵计算机硬件时要声明为native方法。
java中,通过JNI(Java Native Interface,java本地接口)来实现本地化。
JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟
机直接嵌入到本地的应用程序中。图1是Sun站点上对JNI的基本结构的描述。
JAVA本地方法适用的情况
1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问
2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
java下使用JNI调用C++的具体过程:
1.创建java程序:声明一个native方法(不实现),在一个static块中加载动态链接库如:System.loadLibrary("native")
2.编译java文件及通过javah命令生成c++头文件(javac HelloWorld.java 和javah -jni HelloWorld )
3.将生成的头文件和jni.h(位于%java_home%/include下面)都include到C++程序中,在C++程序中实现该指定动态链接库中的本地方法
(1)需要将以下文件复制到Visual Studio.net的安装目录下的\Vc7\include目录中才能使得C++程序成功编译成dll
\jdk\include\jni.h \jdk\include\win32\jawt_md.h \jdk\include\win32\jni_md.h
(2)还需要将上面生成的头文件放入C++项目下!
4.将C++程序生成对应名称的dll(比如这里的hello),放到java程序bin下。则可通过java调用C++程序!!
可以使用vs创建一个win32项目,在配置时设置为dll项目。在代码中实现上面生成的HelloWorld.h中声明的方法!!编译后在该
C++项目的debug目录下得到生成的dll文件,将该dll文件放入环境变量path中定义的library(比如system32下)!则可运行!!
(而C++调用java则有一系列接口函数可使用——当然要先吧jdk等使用到的dll加入到环境变量中去:比如为了初始化Java虚拟机,JNI提供了一系列的
接口函数Invocation API。通过这些API可以很方便地将虚拟机加载到内存中。创建虚拟机可以用函数 jint JNI_CreateJavaVM(JavaVM **pvm, void
**penv, void *args))
分享到:
相关推荐
NULL 博文链接:https://conkeyn.iteye.com/blog/1597188
java调用C/C++全过程 JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。 JAVA通过JNI调用本地...
通过jni完成java调用c/c++,包含c/c++生成Dll动态库
java调用C/C++过程,供初学者学习
包含多个java调用C/C++的代码实例,以及调用说明文档
JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
java使用(jna)调用c/c++第三方动态库 dll文件 所用jar包
C/C++中访问Java方法 C/C++中访问Java父类的方法 C/C++中访问/修改Java变量 Java中访问C/C++方法 Java中访问/修改C/C++变量 动态方式实现: C/C++中访问Java方法 C/C++中访问Java父类的方法 C/C++中访问/修改Java...
如果你想知道怎样用java去本地调用C/C++接口,本文档应该是你需要的,特别对于无基础的朋友,无疑是很好的JNI入门指南,希望对你有帮助。
Android中C/C++调用Java代码
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的...
V. Eclipse+CDT+MinGW 进行JAVA调用C/C++ 34 一、 安装eclipse3.2。 34 二、 安装MinGW。 34 1、 下载MinGW 34 2、 安装 34 3、 安装版本 34 4、 选择安装的编译器 34 5、 选择安装路径,下一步 35 6、 等待下载...
本教程主要讲解java中如何调用C/C++,C/C++中如何调用java,并带Demo和调试指南
Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用 http://blog.csdn.net/u014702653/article/details/71141423
java 调用 dll 的方法,即JNI的使用,demo中有get()/set()方法,操作步骤详细,即使是没用过java的程序员按照步骤依然可以成功。
上篇文章中已经介绍了,关于NDK开发环境的搭建,这里不做赘述。这篇文章主要是通过一个例子来说明如何通过eclispe自动生成.h头文件,适合初学者,详见http://write.blog.csdn.net/postedit/42144847
JNI,JNATIVE,JAWIN 使用Java调用DLL动态链接库的方案我知道的有四种:JNI,Jnative,Jawin,Jacob
详细请见文档说明c/c++调用java方法
从 C/C++ 中调用 Java 代码,有一下几个步骤: 1.创建 JVM。调用 JNI_CreateJavaVM()。 2.寻找要调用的类。调用 FindClass()。 3.找到要调用的方法。调用 GetStaticMethodID()/GetMethodID()。 4.运行方法。...