最近学习cocos2dx,的lua绑定机制,用到了Jni,可是现在目前的3.0版本的Demo工程文件太大,看起来不太方便,于是决定自己先尝试学习一下jni的实现远离,从最简单的java显示helloworld程序开始。

    首先用eclipse创建java应用,加入包com.testJni和testJni.java文件

package com.testJni;
public class testJni{static{System.loadLibrary("testJni");}private native void display();public static void main (String[] args){new testJni().display();}
}

这里display方法的native关键字表示了这是一个使用jni实现的函数,来自于testJni这个外部库,编译一下在bin目录下生成了class文件,然后我们要利用javah生成c语言的头文件,这一步也是卡了我很久的一步,首先我们来看一看javah这个命令

它有两个关键参数 -jni和-classpath,classpath指定了加载类的路径,但是不管我怎么设置,一直会提示我找不到类,后来我百度了很多文章,发现javah这条命令执行位置必须是源码目录,即src目录下,我将class文件拷贝到目录下还是不行,多次尝试之后我发现-jni的路径必须是包名+类名的路径(java文件的路径),即javah执行路径是src目录,-classpath指定class的路径,-jni执行java文件路径,对应我的工程文件命令是

javah -classpath D:\workspace\testJni\bin -jni com.testJni.testJni

这样就顺利生成了.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_testJni_testJni */#ifndef _Included_com_testJni_testJni
#define _Included_com_testJni_testJni
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     com_testJni_testJni* Method:    display* Signature: ()V*/
JNIEXPORT void JNICALL Java_com_testJni_testJni_display(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif

之后我们编写c文件实现Java_com_testJni_testJni_display这个方法

#include <jni.h>
#include <stdio.h>
#include "testJni.h"
JNIEXPORT void JNICALL Java_com_testJni_testJni_display(JNIEnv *env, jobject obj)
{printf("testJni load dll is here!\n");printf("hello world!\n");return;
}

利用vs编译生成dll链接库,需要注意的是需要导入jni相关的jni.h(JAVA_HOME/include),和jni_md.h(JAVA_HOME/include/win32),这JAVA_HOME指的是你的jdk路径,还有因为我的电脑安装的是64位操作系统,在project编译属性中要选择machine64而不是machine86,将生成的dll文件放在java工程目录下,设置java build path 的Native library location为dll所在路径,然后运行

转载于:https://www.cnblogs.com/wanghuanhust/p/3729667.html

Jni Helloworld相关推荐

  1. JNI HelloWorld 亲测可以。

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++) 便想,既然底层用的C,那为什么还能跨平台(现在感觉跨平台这个特 ...

  2. Linux下JNI实现

    最近研究Android,涉及到JNI调用.虽然我对Java语言有所了解,但是还没有接触过JNI.今天在Unix Center的Ubuntu上面用JNI实现了"经典"的"H ...

  3. JAVA基础之理解JNI原理

    JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C.C++)的动态库进行交互,给其它语言发挥优势的机会. 有了J ...

  4. Linux 下 Jni 实现

    最近研究Android,涉及到JNI调用.虽然我对Java语言有所了解,但是还没有接触过JNI.今天在Unix Center的Ubuntu上面用JNI实现了"经典"的"H ...

  5. java native 例子_Java native方法以及JNI实践

    前言 今天看AndFix实现时,核心方法之ReplaceMethod方法是一个native方法,之前并没有遇到过,所以在此整理记录. native的作用 总而言之:native是与C++联合开发的时候 ...

  6. Android JNI开发生成.h头文件问题(转)

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

  7. Java笔记-Java通过JNI调用Linux上so文件

    目录 基本概念 代码与实例 基本概念 流程就是下面这个图: 代码与实例 这里以Linux上的so文件为例. 创建好HelloWorld.java后,通过: javac HelloWorld.java ...

  8. 【javajni】jni入门篇

    [序]我是为了android研究需要才开始研究JNI的.阅读本例文之前希望你按照上一篇[java]Windows7 下环境变量设置已经对环境变量进行正确设置 本文通过一个简单的例子来演示如何使用JNI ...

  9. osx jni 开发 1

    听说了jni很久,一直没有时间静下来好好学习,接下来我会在osx平台上面学习基本的jni的内容 1 相关概念 jni : java native interface sun公司提供的java调用nat ...

最新文章

  1. 百度大脑开放日第三期:四大全新平台、两大场景方案助力开发者逐梦 AI
  2. HP CloudSystem:几分钟完成云系统配置
  3. Android踩坑日记:Okhttp设置User-Agent你可能没遇到的坑
  4. c语言随机迷宫生成方法,[原创]递归随机迷宫生成算法详解
  5. java 生成msg文件_java – 如何获取.MSG文件的MIME类型?
  6. 【BZOJ1188】分裂游戏(博弈论)
  7. MFC 消息响应与消息处理过程
  8. 命php令删除文件夹,window_win7系统通过cmd命令提示符的del命令删除文件的详细教程,怎么利用cmd命令提示符的del命 - phpStudy...
  9. REACT是否真的就比VUE强?(文末附两个框架的学习福利)
  10. Java并发编程之Lock
  11. 蓝桥杯日期填空问题:高斯日记/星系炸弹
  12. src refspec xxx does not match any
  13. 武汉科技大学ACM:1006: 我是老大
  14. win 10 linux shell,实用工具:Win10下的bash shell打开教程
  15. Linux下C语言编程(1):IO编程
  16. uni-app 超详细教程(一)(从菜鸟到大佬)
  17. 数据分析学习笔记(二)数据分析三思维七技巧
  18. bitcoin源码分析
  19. HTML和web窗体的区别(转载)
  20. [整站源码]thinkphp古筝古琴书画培训类网站模板+前后端源码

热门文章

  1. 转载、Python的编码处理(二)
  2. 使用sharepreferce记录数组数据
  3. 2003年以来网页尺寸增长3倍
  4. MFC中实现模态对话框的结构与原理
  5. vs2008 C++创建和调用标准DLL
  6. 浅析C语言中strtol()函数与strtoul()函数的用法
  7. 我的世界服务器无限装备指令2020,我的世界区域保护指令_我的世界区域保护指令除了自己手机版刷屏2020_攻略...
  8. STM32F4+Wi-Fi+EDP 向 OneNet 上传数据
  9. 3、AD使用技巧分享
  10. fastadmin 批量上传不成功_shopee批量上传产品步骤