- 浏览: 390851 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (198)
- java (28)
- J2EE (19)
- struts (33)
- sping (13)
- hibernate (18)
- mybatis (15)
- connection pool (3)
- DB (26)
- SQL (21)
- html (13)
- js (7)
- json (3)
- jquery (2)
- document (17)
- linux (15)
- C# (1)
- url (2)
- eweb4j (1)
- Turbine (1)
- 框架 (11)
- jdbcTemplate (3)
- aop (2)
- windows (2)
- ubuntu (1)
- eclipse (11)
- JPA (8)
- svn (4)
- get 传值 (2)
- mysql (5)
- oracle (2)
- hadoop (1)
- MongoDB (2)
- spring (1)
- python (1)
最新评论
-
jcbingjc:
楼主,你好,按照上面的配置,我报如下错误:Missing Pe ...
[properJavaRDP]在网页中实现远程连接 -
sucful:
折腾了半天跑不通 ,要传就搞个完整的吧
Struts2 <sx:div/>实现页面模块异步刷新 -
Kattou:
你好! 看了你写的这个分页 感觉很好, 但是不怎么会用么,请指 ...
jsp分页控件 -
我叫PSB:
地址完全用不了
eclipse中的安装 jseclipse -
1111emotion:
我的工程里还是有乱码的情况,我该改的地方都改了。
Eclipse/MyEclipse更改默认字符集 设置UTF-8
Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。
l 标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的
l 你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的
l 程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们
1.编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。编写java代码,我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so)
2。编译java代码
javac HelloWorld.java 生成HelloWorld.class文件
3。创建.h文件
这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行
javah 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: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4。 编写本地实现代码
在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。
5。 运行java程序
把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world|
的输出了。
Linux下测试jni
1、在测试用户下建立src、lib目录
2、进入src目录编写HelloWorld.java
class HelloWorld {
/* Native method declaration */
public native void displayHelloWorld();
/* Use static intializer */
static {
System.loadLibrary("hello");
}
/* Main function calls native method*/
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
3、然后javac HelloWorld.java
4、使用 javah 工具生成 HelloWorld.h 文件
javah HelloWorld
5、编写HelloWorld.c
#include <jni.h>;
#include "HelloWorld.h"
#include <stdio.h>;
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
6、编译c的动态库
gcc -shared -o $HOME/lib/libhello.so HelloWorld.c
注意$HOME/lib目录要加入到环境变量LD_LIBRARY_PATH中去
7、java HelloWorld运行程序
发表评论
-
[properJavaRDP]在网页中实现远程连接
2017-07-19 16:21 1591内容摘要: 利用开源软件properJavaRDP实现远 ... -
Java 利用FTP上传,下载文件,遍历文件目录
2017-06-12 21:32 1482Java实现FTP上传下载文件的工具包有很多,这里我采用J ... -
用javacsv API 来操作csv文件
2017-06-08 16:04 781简单的操作代码: /** ... -
Apache与Tomcat整合,配置及压缩
2017-03-07 10:16 7151、下载Apache2和对应的mod_jk.so,m ... -
Ubuntu16安装JDK1.8与配置环境变量
2016-12-25 13:42 10681、源码包准备: 首先到官网下载jdk,http://w ... -
quartz 时间配置规则
2016-05-28 02:19 0quartz 时间配置规则 格式: [秒] [分] [小时 ... -
J2EE RMI搭建
2012-10-08 13:21 1682RMI接口: package com.ynitil.sinf ... -
struts2 url传值中文乱码解决方案
2012-09-21 16:21 1383HttpServletRequest request = Ac ... -
Java操作Excel方法详解
2012-07-03 16:15 1221JAVA 通常有两种方法来 ... -
JSP的九个隐含对象,EL表达式中的11个隐含对象,JSP的6个基本动作
2012-07-03 09:37 1569一、page 对象 page对 ... -
Java 7 的新特性一览表
2012-06-29 00:25 1208官方说是 7月28日 正式发布 Java 7 ,正常的话我们应 ... -
Java 7新功能介绍及与Java1.7性能测试比较
2012-06-29 00:20 2608这里将进行Java 7新功 ... -
把证书导入java的cacerts证书库
2012-05-30 09:49 1561把证书导入java的cacerts证书库的步骤: 第一步:I ... -
java去除html格式,提取文字信息
2012-05-25 11:13 11099import java.util.regex.Matcher; ... -
java.lang.OutOfMemoryError: Java heap space 解决方法
2012-04-09 11:12 994java.lang.OutOfMemoryError: Jav ... -
JAVA导出Excel
2012-03-28 10:58 1522package lee; import java.io. ... -
HTMLParser抓取网页信息
2011-12-07 09:19 1890HTMLParser具有小巧,快速 ... -
Java基础 你掌握多少(转)
2011-11-26 00:15 1159一:1:简述Java的基本历史2:简单写出Java特点 ... -
面向对象设计的SOLID原则
2011-11-26 00:15 1147S.O.L.I.D是面向对象设计和编程(OOD& ... -
JAVA字符串转日期或日期转字符串(转)
2011-11-09 21:18 11578JAVA字符串转日期或日期转字符串(转) 定义了 ...
相关推荐
底层的指令或核心算法,会使用C/C++处理,涉及数据处理的时候,为了安全和快速开发,会使用Javascript或Python等脚本语言实现数据分析处理。因此,开发者应该学习或掌握语言混合编程。 C++和Java是主流的两种编程...
六、 MFC程序中嵌入Java虚拟机... 142 Chap19:JNI编程系列之基础篇... 148 System.loadLibrary("HelloWorld"); 149 JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); 150 Chap20:JNI编程系列...
www.51foru.com/index008jsjc.htm 19K 2003-12-10 - 百度快照 C Java PHP Perl Python的程序代码美化工具使用 ...php) 一个速度很快的C/C++/Java源代码美化工具。 astyle比indent好在 有很多成套的的风格定义:ansi ...
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
因为 aardio奇特的语言特性,aardio的胶水能力极强,在aardio中可以非常方便的调用C语言、C++、C#、Java、Python、Javascript、Node.Js、Flash ActionScript、PHP、VBScript、NewLISP、Delphi、Go语言 .........
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
一款强大的编辑器,完全可以替代windows内置的记事本,打开的文件以标签页形式进行排列,支持C/C++, Java, JavaScript, Visual Basic, VBScript, HTML, ASP, JSP, SQL, Cobol, C#, CSS, Pascal, Perl, PHP等多种语言...
可扩展性和可嵌入性,可以调用C/C++代码反之亦可以 代码规范程度高,可读性强 目前几个比较流行的领域,Python都有用武之地。 云基础设施 - Python / Java / Go DevOps - Python / Shell / Ruby / Go 网络爬虫 - ...
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
预先包括了对PHP, Perl, Java, Pascal, C/C++, HTML, XML, XSLT等语言的语法定义 。语法定义是可继承和嵌入的(比如内嵌于HTML中的JavaScript, PHP and CSS)。其他编程语言的支持可以通过自定义语法文件实现。 为了...
7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用外部类对象 7.6.6 从内部类继承 7.6.7 内部类可以覆盖吗? 7.6.8 内部类标识符 7.6.9 为什么要用内部类:控制框架 7.7 构建器和多形性 7.7.1 构建器的调用顺序 ...
4、作者介绍:某大厂资深算法工程师,从事Matlab、Python、C/C++、Java、YOLO算法仿真工作10年;擅长计算机视觉、 目标检测模型、智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、智能控制、路径规划...
因为 aardio奇特的语言特性,aardio的胶水能力极强,在aardio中可以非常方便的调用C语言、C++、C#、Java、Python、Javascript、Node.Js、Flash ActionScript、PHP、VBScript、NewLISP、Delphi、Go语言 .........
3.能跨越多种不同的程序语言开发环境,如Visual Basic/C++,Java语言,甚至Script环境下的Java/VBScript等。虽然开发的语言环境不同,但ADO提供了类似的设计方式,方便了用户的使用。 4.可以在支持COM(Component ...
Java语言的语法与C语言和C++语言很接近,使得大多数程序 员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人 迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,...
c#原始码转Java原始码的AsmJit AsmJit是一个轻量级的库,用于以C ++语言编写的机器代码生成。 有关更多详细信息,示例和文档,请参见页面。 文献资料 重大变化 有时打破API是不可避免的,该怎么办? 参见,现在是...
代码,您可以将它们嵌入到您自己的应用程序中。 有关 pfff API 的使用示例,请参见 demos/ 目录。 另请参阅 docs/manual/Parsing_xxx.pdf 和 docs/manual/Analyzis_xxx.pdf 以获取有关如何使用或扩展 pff 的更多文档...
是一种面向模型的编程技术,允许开发人员在传统代码中嵌入建模概念(例如 UML 关联、状态机)、模式、生成模板和其他抽象,反之亦然。 它为 Java、C++ 和 PhP 生成高质量的代码,以及图表、指标和许多其他工件。 它...