转载请说明出处~

本文教程翻译jni官方文档的部分内容。

要查看Jni官方文档,请点击这里

先感叹一下时光如水,岁月不留人哇有木有!!!认真想想在XMU的这三年,真的改变了我好多。

我还清楚地记得学习C语言写的第一个程序就是Hello,world!

那个时候对编程语言真是一窍不通,不过也正是从那个时候开始,对编程产生了兴趣~

闲话不多说,既然是入门教程,我们就从简单的Hello,world开始。

这个程序使用java代码调用C函数来输出Hello,world.

步骤如下:

1、  创建一个HelloWorld.java类,并在类中声明native方法

2、  利用javac命令编译HelloWorld.java产生HelloWorld.class

3、  利用javah –jni命令产生C头文件HelloWorld.h,该头文件为native方法的实现提供了函数原型。

4、  写出native方法HelloWorld.c

5、  将HelloWorld.c编译成native类库,可以创建HelloWorld.dll或HelloWorld.so

6、  运行HelloWorld程序,HelloWorld.class与(HelloWorld.so/HelloWorld.dll)会在运行时候被加载

流程图:

实践才能出真知,下面我们正式开始啦~

注:本人操作系统为Windows 7

1、在F盘创建目录【HelloWorld】,然后编写HelloWorld.java

public class HelloWorld {

//声明本地方法print()

public native void print();

public static void main(String[] args) {

//创建一个HelloWorld对象

HelloWorld helloWorld = new HelloWorld();

//调用对象方法print

helloWorld.print();

}

//类装载器,在类被使用时候加载

static{

System.loadLibrary("HelloWorld");

}

}

2、编译HelloWorld.java生成HelloWorld.class

3、创建HelloWorld.h文件

查看该头文件内容

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* 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

看到声明的方法了吗?没错,就是它——Java_HelloWorld_print(JNIEnv*,jobject);

第一个参数是JNIEnv的接口指针,第二参数是HelloWorld对象的引用,类似于C++中的this指针。

注:JNIEXPORT和JNICALL两个宏命令可以无视之~

【Java代码】通过这个【函数接口】来调用底层【C代码】

4、编写HelloWorld.c实现这个方法

#include

#include

#include "HelloWorld.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)

{

printf("yulongfei says:");

printf("Hello, world!\n");

return;

}

5、将HelloWorld.c编译为native类库

由于我是windows 7操作系统,所以编译成HelloWorld.dll库,这里需要使用工具Visual Studio 2008

操作步骤:

Step 1:启动VS2008 --> 文件 --> 新建项目 --> Visual c++ --> Win32控制台应用程序

Step 2: 名称输入HelloWorld,程序保存路径你自己定,,点击确定

Step 3:在向导中选择【下一步】。在应用程序类型中,选择【DLL】;在附加选项中,选择【空项目】。选择【完成】

Step 4: 打开资源管理器,将HelloWorld.h复制到【头文件】中,将HelloWorld.c复制到【源文件】中。

Step 5: 选中菜单栏的【生成】-->【生成HelloWorld】;或者直接按下快捷键Shift+F6

注:如果报错

请你定位到jdk安装目录下,然后将【include\jni.h】以及【include\win32\jawt_md.h】和【include\win32\jni_md.h】这三个文件拷贝到你VS安装目录的VC\include下,我的是D:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include。

Step 6: 定位到VS2008刚刚建立的HelloWorld工程目录下,将Debug目录下的HelloWorld.dll 拷贝到F盘【HelloWorld】的目录下,接下来就可以运行程序了。

6、运行程序

哈哈,开心吧,成功输出:Hello, world!咯~~

本次学习源码下载链接,请点击这里!

java jni helloword_JNI学习一:编写HelloWorld程序相关推荐

  1. java jni helloword_JNI入门教程之HelloWorld篇

    JNI入门教程之HelloWorld篇 来源:互联网  宽屏版  评论 2008-05-31 09:07:11 本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第 ...

  2. 自学java编译老是出错_编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思...

    编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思 这个能出错的地方就难说了,能给出代码或者错误提示吗 为什么javac编译后说写入错误呢HelloWorld.java : ...

  3. java安装 hello_安装JAVA步骤,并编写HELLOWORLD程序

    安装Java步骤,并编写helloworld程序 1.安装JDK(Java Development Kit) JDK是Java开发工具包(Java Development Kit)的缩写.它是一种用于 ...

  4. 【ROS】学习笔记一 ubuntu16.04下vs code配置ros环境并编写helloworld程序

    [ROS]ubuntu16.04下vs code配置ros环境并编写helloworld程序 一.vs code下载 1.相关配置要求: (1)系统为ubuntu16.04 (2)已安装好kineti ...

  5. java实验多线程机制_使用Java多线程的同步机制编写应用程序 PDF 下载

    使用Java多线程的同步机制编写应用程序 PDF 下载 本站整理下载: 相关截图: 主要内容: 一. 实验名称 使用Java多线程的同步机制编写应用程序 二. 实验目的及要求 1.理解并行/并发的概念 ...

  6. java 模拟电梯_请使用的Java的多线程知识来编写一个程序,实现一个简单的摩天大楼的电梯模型程序是以一座摩天大楼的多个电梯为背景,用线程、流程控制、随机函数等知识来模拟它。2、电梯的描述:...

    请使用的Java的多线程知识来编写一个程序,实现一个简单的摩天大楼的电梯模型 程序是以一座摩天大楼的多个电梯为背景,用线程.流程控制.随机函数等知识来模拟它. 2. 电梯的描述: 电梯是日常生活中经常 ...

  7. Fork and Join: Java也可以轻松地编写并发程序 原文地址 作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zi

    Fork and Join: Java也可以轻松地编写并发程序 原文地址   作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zip) ...

  8. Java语言程序设计-Eclipse入门之HelloWorld程序

    Step1:启动Eclipse     在Eclipse的安装路径下找到eclipse.exe,鼠标双击运行之,如果JDK已经正常安装将显示Eclipse的启动画面,如图所示,在弹出的对话框中选择工作 ...

  9. Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg...

    package com.swift;import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; im ...

最新文章

  1. 编译-编译原理C/C++ 静态链接库(.a) 与 动态链接库(.so)
  2. 图画hadoop -- 生态圈
  3. 3w最简单led灯电路图_led灯驱动电源电路图大全(六款模拟电路设计原理图详解)...
  4. 详解C与C++的联系与区别
  5. 在SQL Server中导入和使用CSV文件
  6. 新型智慧城市 相关网址
  7. java语言打印上三角和下三角,进一步得到九九乘法表
  8. 精读CSS权威指南第四版(3)
  9. 怎么在Eclipse中安装WindowsBuilder
  10. html语言字体为隶书,css如何设置隶书字体库
  11. 无线路由dns服务器地址,tplink无线路由器怎么设置DNS服务器地址
  12. mysql 1308_MySQL恢复数据报ERROR 1308 : LEAVE with no matching label
  13. 周末闲暇用javascript写个网页“斗兽棋”小游戏
  14. mysql mtq_mysql实现远程登录
  15. android pcm 音量_Android中实时获取音量分贝值详解
  16. 面试心得---按时交付代码的重要性
  17. 查找节点下的所有子节点(包括孙节点和隐藏节点)
  18. 职工信息存入文件employee,再抽取部分信息存入另一个文件employee_type
  19. 数码照片处理基本技法
  20. 智能计算机系统的概念,自动智能系统

热门文章

  1. 个人计算机有控制器和运算器吗,cpu是由控制器和运算器组成的对还是错
  2. 与40mhz信道不兼容设置_物理信道发射功率
  3. fiddler如何filter_Fiddler工具的过滤功能介绍
  4. mongodb 监听不到端口_干货|MongoDB简单操作和通过python进行操作
  5. idea中event log_【JavaScript 教程】事件——Event 对象
  6. .npy文件_Numpy库使用入门(六)文件的存取
  7. 条码管理系统mysql_银行通用固定资产条码管理系统
  8. 找到一个或多个多重定义的符号_初中数学之相反数,总结规律,学会多重符号的化简...
  9. np.random.choice用法
  10. 数字图像处理-7频域滤波