Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制
1.在Eclipse中配置Javah,配置如下
位置是你javah.exe在你电脑磁盘上的路径
位置:C:\Program Files\Java\jdk1.8.0_112\bin\javah.exe
工作目录:${project_loc}/src
自变量:-classpath .;./classes -d "${project_loc}/jni" -jni ${java_type_name}
2.创建一个java文件
1 package experience5; 2 3 public class NewNineToNine { 4 public native void showInfo(); 5 static{ 6 System.loadLibrary("sy5-1"); 7 } 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 NewNineToNine obj = new NewNineToNine(); 11 obj.showInfo(); 12 } 13 14 } 15
注意导入动态链接库不需要加后缀名
将要用C++或C语言实现的方法设置成native类型
3.选择要通过javah生成的类
(需要点击一下吧,不然会报错:Launching javah has encountered a problem.The selected resourse does not resolve to a Java element
或者Launching javah has encountered a problem.Variable references empty selection :${project_loc}
只要点击了就好,个人觉得是这样哇》。《)
然后点击运行
这样就会在工程文件夹里生成一个jni的文件夹:
在jni包里面生成了“experience5_NewNineToNine.h”
4.编写一个C++文件,我用的是猥琐死丢丢2013,选择win32控制台程序,创建一个空白的 dll动态链接库
复制之前生成的“experience5_NewNineToNine.h“文件,
和C:\Program Files (x86)\Java\jdk1.8.0_151\include目录下的jni.h文件
,以及C:\Program Files (x86)\Java\jdk1.8.0_151\include\win32目录下的jni_md.h文件放到和test.cpp同目录下
=======================
“experience5_NewNineToNine.h”文件:注意javah编译出的头文件打开之后显示的是#include<jni.h>因为我们要引入jdk下的 jni.h文件,所以要用双引号
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class experience5_NewNineToNine */#ifndef _Included_experience5_NewNineToNine #define _Included_experience5_NewNineToNine #ifdef __cplusplus extern "C" { #endif /** Class: experience5_NewNineToNine* Method: showInfo* Signature: ()*/ JNIEXPORT void JNICALL Java_experience5_NewNineToNine_showInfo(JNIEnv *, jobject);#ifdef __cplusplus } #endif #endif
在源文件中创建一个test.cppJNIEXPORT void JNICALL Java_experience5_NewNineToNine_showInfo(JNIEnv *, jobject);就是在javah生成的头文件中声明的方法,我们需要在test.cpp中把这个方法实现这些代码没优化,只到了能用的程度 test.cpp:
1 #include<iostream> 2 #include"experience5_NewNineToNine.h" 3 using namespace std; 4 JNIEXPORT void JNICALL Java_experience5_NewNineToNine_showInfo(JNIEnv *env, jobject obj) 5 { 6 int a[11][11]; 7 for (int i = 1; i <= 10; i++) { 8 a[i][1] = 1; 9 a[i][i] = 1; 10 for (int j = 2; j<i; j++) { 11 a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; 12 } 13 14 if (i>1) { 15 for (int z = 0; z < (10 - i); z++) { 16 printf(" "); 17 18 } 19 for (int j = 1; j <= i; j++) { 20 cout << " " << a[i][j]; 21 } 22 } 23 else cout << " " << a[1][1] << endl; 24 25 cout << endl; 26 27 } 28 }
.要在java中输出的内容就在test.cpp中的
JNIEXPORT void JNICALL Java_experience5_NewNineToNine_showInfo(JNIEnv *env, jobject obj)方法体中实现然后直接编译运行过,会提示不能运行.dll文件,那么成功生成sy5-1.dll
==================然后还没完: 让java程序成功调用sy5-1.dll有两种方法,自然有一种比较烦 1.复制sy5-1.dll到系统的C:\Windows\System32目录下,默认环境变量有这个 2.配置环境变量指向动态链接库所在的路径(这种表达我也不知道对不对,意思到了就好0.0)
配置好了就不用一次一次复制了,
==================最后一步: 重启eclipse,编译运行。结果如下:
发生的问题: 1.抛出了java.lang.UnsatisfiedLinkError异常: no sy1 in java.library.path,程序没找到.dll文件,放对位置就没毛病了 2.can't load IA 32-bit .dll on a AMD 64-bit platform错误,参考网上回答,最后我用了一个32位的JDK然后妥了; 然后在StackOverflow里有个回答:https://stackoverflow.com/questions/8113080/cant-load-ia-32-bit-dll-on-a-amd-64-bit-platform 里面是用cmd编译运行,有点迷,所以干脆下个32位JDK一了百了 3.溜了溜了
转载于:https://www.cnblogs.com/LinKinSJ/p/7853813.html
Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制相关推荐
- Android通过jni调用本地c/c++接口方法总结
网上有网友问android的原生应用,上层java代码如何通过jni调用本地的c/c++接口或第三方动态库 ?之前搞过android应用开发和底层c/c++接口开发都是一个人搞定,觉得还是蛮简单的.其 ...
- Java打印杨辉三角
Java打印杨辉三角 打印杨辉三角首先要理清楚思路,找到其中的规律,,然后通过其中的规律用java循环的方法想办法解决掉.我们通过仔细的观察不难发现杨辉三角除每行最左侧和最右侧的数字外,每个数字等于它 ...
- JAVA打印输出杨辉三角前n行_Java 打印n行杨辉三角数据
import java.util.Scanner; class T22 { public static void main(String[] args) { System.out.println(& ...
- JAVA——实现杨辉三角的指定行数输出
实现杨辉三角的指定行数输出 1.要求 杨辉三角是一个由数字排列的三角形数表,此方法介绍如何实现控制台输出杨辉三角形. 2.杨辉三角 杨辉三角最本质的特征是:除两侧元素均为1以外,其余每个位置上的元素值 ...
- java趣味题-打印杨辉三角
java趣味题-打印杨辉三角 public class First105 { public static void main(String[] args) { int [][] a=new int ...
- 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//
嵌入式 Linux 开发工具篇问题整理 1. 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别) 是否有无操作系统: 2. 移植操作系统的好处有哪些 ...
- java练习day06-Debug-进制-二维数组-杨辉三角
Day06 Debug Debug概述: Debug是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. Debug操作流程 Debug调试,又被 ...
- 杨辉三角python_Python面试150题汇总,都是常问的面试题!
周末,Python面试题每日一题暂停更新,下面把最近整理的1-50篇Python面试文整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于Python感兴趣的,建议可以认真阅读 ...
- 汉罗塔问题和杨辉三角(java实现)
汉罗塔问题和杨辉三角问题 汉罗塔 思路分析: 代码: 杨辉三角 思路分析 代码 汉罗塔 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C) ...
- 用Java实现杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: [[1],[1, ...
最新文章
- 计算机网络安全防护体系研究
- 联想笔记本降万元抢学生市场,兄弟们快抢啊
- 理解Underscore中的uniq函数
- 3天,把MySQL索引、锁、事务、分库分表撸干净了!
- 【PC工具】windows图片文字识别软件,天若OCR文字识别软件
- 机器人(我在哪,我要往哪走)
- python怎么一次输入两个数_python如何一次性输入多个数
- 基于Android的图书管理系统
- python pandas 格式化qcc数据【最后保存csv文件】
- python人口普查数据数据分析_Python:第六次全国人口普查数据分析及可视化(pandas、matplotlib)...
- matlab或_Matlab下载安装教程
- CleanMyMac X下载Mac系统清理优化工具
- 推荐工具 HBuilder
- linux设置usb选择性暂停,USB大容量存储设备无法启动的解决方法
- baidu 快递查询API
- Java选出偶数,Java 定义集合存入20个随机数字,通过自定义方法筛选偶数元素,放入新集合,打印输出...
- python彩色螺旋线_python绘制彩色螺旋线
- 浏览器去除烦人的黑白滤镜
- 门诊地图导航怎么做,零成本的医院室内导航解决方案
- 2021年CFA最新学习资料!