- 浏览: 182849 次
- 性别:
- 来自: 北京
最新评论
-
u011374223:
获取颜色的方法有两个,07xssfWORKBOOK的需要用这个 ...
apache poi读取excel中的颜色,真是坑爹啊 -
zhangtcb:
读取的颜色和Excel中的不一样啊
apache poi读取excel中的颜色,真是坑爹啊 -
LD_21:
...
log4j日志文件的相对路径 -
xfxlch:
upThx
来,让我们一起画个印章吧 -
xinxinlong:
单元格的style里面有个颜色,如果双击单元格,里面的文字选中 ...
apache poi读取excel中的颜色,真是坑爹啊
自己参考网上资料写的一些有代表性的实例,仅供参考。
没啥说的,测试类
package hellonative; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; /** * * @author lan */ public class Main { static { try { InputStream inputStream = Main.class.getResourceAsStream("HelloNative.dll"); // System.out.println(inputStream); File temporaryDll = File.createTempFile("HelloNative", ".dll"); // System.out.println(temporaryDll.getAbsolutePath()); FileOutputStream outputStream = new FileOutputStream(temporaryDll); byte[] array = new byte[8192]; int i = -1; while ((i = inputStream.read(array)) != -1) { outputStream.write(array, 0, i); } outputStream.close(); temporaryDll.deleteOnExit(); System.out.println(temporaryDll.getAbsolutePath()); System.load(temporaryDll.getPath()); } catch (Exception e) { e.printStackTrace(); } } /** * @param args the command line arguments */ public static void main(String[] args) { Main m = new Main(); m.nativePrint(); m.sayHello("世界"); System.out.println(m.sayFromC()); System.out.println(m.addition(10, -5)); System.out.println(m.isEqual(10, 1)); String[] array = new String[6]; for (String s : m.changeStringArray(array)) { System.out.print(s + " "); } System.out.println(); int[] is = new int[14]; for (int i : m.changeIntArray(is)) { System.out.print(i + " "); } System.out.println(); Commons c = new Commons(111, "who?"); m.readObject(c); System.out.println(c); c = m.writeObject(); System.out.println(c); } private native void nativePrint(); private native void sayHello(String hello); private native String sayFromC(); private native int addition(int a, int b); private native boolean isEqual(float a, float b); private native int[] changeIntArray(int[] array); private native String[] changeStringArray(String[] array); private native void readObject(Commons com); private native Commons writeObject(); }
头文件就不用说了
实现的c文件,字段签名可以用javap -s 类全名(包和类名)查看,感觉和反射差不多
#include <jni.h> #include <stdio.h> #include "Hello.h" JNIEXPORT void JNICALL Java_hellonative_Main_nativePrint (JNIEnv * env, jobject obj) { printf("Hello from c.\n"); } JNIEXPORT void JNICALL Java_hellonative_Main_sayHello (JNIEnv * env, jobject obj, jstring hello) { char* str; str = (char*) (*env)->GetStringUTFChars(env, hello, NULL); printf("Hello %s from c.\n", str); (*env)->ReleaseStringUTFChars(env, hello, str); } JNIEXPORT jstring JNICALL Java_hellonative_Main_sayFromC (JNIEnv * env, jobject obj) { char* str = "c say hello 世界"; return (*env)->NewStringUTF(env, str); } JNIEXPORT jint JNICALL Java_hellonative_Main_addition (JNIEnv * env, jobject obj, jint a, jint b) { int i = a; int j = b; return (jint) i + j; } JNIEXPORT jboolean JNICALL Java_hellonative_Main_isEqual (JNIEnv * env, jobject obj, jfloat a, jfloat b) { float i = a; float j = b; float k = i - j; if (k == 0) { return (jboolean) 1; } return (jboolean) 0; } JNIEXPORT jintArray JNICALL Java_hellonative_Main_changeIntArray (JNIEnv * env, jobject obj, jintArray jia) { int length = (*env)->GetArrayLength(env, jia); int i = 0; int k[length]; jintArray array = (*env)->NewIntArray(env, length); for (i = 0; i < length; i++) { k[i] = i * 10; } (*env)->SetIntArrayRegion(env, array, 0, length, k); return array; } JNIEXPORT jobjectArray JNICALL Java_hellonative_Main_changeStringArray (JNIEnv * env, jobject obj, jobjectArray joa) { int length = (*env)->GetArrayLength(env, joa); int i = 0; jclass oc = (*env)->FindClass(env, "java/lang/String"); jobjectArray array = (*env)->NewObjectArray(env, length, oc, 0); for (i = 0; i < length; i++) { char* str = "Hello"; jstring s = (*env)->NewStringUTF(env, str); (*env)->SetObjectArrayElement(env, array, i, s); } return array; } JNIEXPORT void JNICALL Java_hellonative_Main_readObject (JNIEnv * env, jobject obj, jobject commons) { jclass class = (*env)->GetObjectClass(env, commons); //or FindClass(); jfieldID fid = (*env)->GetFieldID(env, class, "id", "I"); jmethodID mid = (*env)->GetMethodID(env, class, "setName", "(Ljava/lang/String;)V"); int value = (*env)->GetIntField(env, commons, fid); printf("id is %d\n", value); (*env)->SetIntField(env, commons, fid, 10); jstring s = (*env)->NewStringUTF(env, "Hello"); (*env)->CallVoidMethod(env, commons, mid, s); (*env)->ReleaseStringUTFChars(env, s, (*env)->GetStringUTFChars(env, s, 0)); } JNIEXPORT jobject JNICALL Java_hellonative_Main_writeObject (JNIEnv * env, jobject obj) { jclass class = (*env)->FindClass(env, "hellonative/Commons"); jmethodID mid = (*env)->GetMethodID(env, class, "<init>", "(ILjava/lang/String;)V"); const char* str = "这是what?"; jstring s = (*env)->NewStringUTF(env, str); jobject o = (*env)->NewObject(env, class, mid, 100, s); (*env)->ReleaseStringUTFChars(env, s, str); return o; }
这个就是Commons文件了
package hellonative; /** * * @author lan */ public class Commons { private int id; private String name; public Commons(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Commons[id:" + id + ",name:" + name + "]"; } }
最后是运行结果了
G:\Users\lan\AppData\Local\Temp\HelloNative461556334708685656.dll c say hello 世界 5 false Hello Hello Hello Hello Hello Hello 0 10 20 30 40 50 60 70 80 90 100 110 120 130 Commons[id:10,name:Hello] Commons[id:100,name:这是what?] Hello from c. Hello 世界 from c. id is 111
发表评论
-
公约数,公倍数和素数的简单计算
2012-04-01 16:08 1331为自己留作备份,省得用到的时候再去寻找 简单的计算最大公约数 ... -
java简单打印
2012-03-08 09:56 1234没什么,就是一个简单的打印,留作存档 publi ... -
httpclient4的封装
2012-01-06 15:11 4636没什么特别的,自己封装着用的. package cpcns. ... -
h2的baseDir
2011-11-11 16:38 1464使用h2 1.3.161.在web项目中.计划在Listene ... -
eclipse下自动打包项目并部署到web项目的lib下
2011-10-18 15:59 5119修改web项目的.settings下的org.eclipse. ... -
获取汉字的五笔,全拼和双拼的工具类
2011-10-10 15:51 2393如题,项目需要,首先可用的自然是pinyin4j. 在不考虑 ... -
五笔86和汉字对照表
2011-10-09 16:53 2533项目要用到汉字转拼音和五笔,拼音容易,使用pinyin4j. ... -
java System属性
2011-09-19 10:14 1387自定义 : java -Dname=value S ... -
log4j日志文件的相对路径
2011-09-01 10:51 6813一直没能很好的解决log4j的日志文件的保存路径.今天恰好又遇 ... -
Apache codec中的base64
2011-07-20 09:46 2287一直使用sun的base64,但是感觉不是很好,毕竟不是标准包 ... -
来,让我们一起画个印章吧
2011-07-04 14:52 4530这几天发现有哥们在介 ... -
svg中的arc转化为java中的arc
2011-05-27 15:31 2682最近项目需要解析svg中的path.直线和贝塞尔曲线都好办,唯 ... -
swing的拖拽(dnd)的简单实现
2011-03-28 10:18 2008这几天项目需要用到dnd,API比较麻烦.在网上找了很多,都只 ... -
自用的MD5计算工具
2011-03-11 15:45 1783/** * 检查输入流的MD5值是否符合.如果MD5为 ... -
用jsoup分析下载巨鲸的mp3
2011-02-25 15:37 1727这两天突然想听听杰克逊的歌.首选当然是巨鲸. 支持正版. ... -
获取子类的泛型参数
2011-01-27 16:03 1358用的时候不好找,今天看nutz的dao的源码看到了,摘出来备份 ... -
简单的通过注解运行的dao
2011-01-26 11:47 1792项目是个老项目,是个比较简单,但是编码比较凌乱的项目.数据库字 ... -
java模拟js的escape和unescape函数
2011-01-05 10:43 3468这个是在网上找的代码,然后修改了下.作用标题已经很明显了. ... -
自己写的多线程对象池
2010-12-10 16:53 1322/** * 排版器的一个公用接口 <br> ... -
apache poi读取excel中的颜色,真是坑爹啊
2010-12-01 16:23 16973工作原因,需要使用poi来读取excel中的所有内容. 其他 ...
相关推荐
在这个"CarDVR jni使用实例"中,我们可以深入探讨JNI的基本概念、工作原理以及如何在实际项目中应用。 首先,我们需要了解JNI的核心概念。JNI是Java平台提供的一种接口,它定义了一套标准的C/C++函数调用规范,使得...
这个“JNI使用实例”可能是一个详细的教程,涵盖了如何在Android应用程序中设置和使用JNI的基本步骤。首先,我们需要创建一个Java类,声明native方法,这些方法将在本地代码中实现。例如: ```java public class ...
Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例Android NDK JNI 经典实例
这个"ubuntu上面使用jni例子"的压缩包很可能是提供了一个在Ubuntu环境下开发和运行JNI程序的示例。 JNI的核心在于创建本地方法接口,这些接口允许Java代码调用C/C++编写的函数,反之亦然。下面我们将深入探讨在...
这个“安卓使用jni的例子”是一个实际应用JNI的示例,用于展示如何在Android平台上通过JNI接口实现Java代码调用C/C++代码。 首先,我们需要了解JNI的基本结构。在Java端,我们会定义一个native方法,这个方法没有...
通过本文,我们可以了解 Java 和 C++ 之间的互相调用实例的实现过程,包括 C++ DLL 文件的创建和使用,以及 Java 代码中使用 JNI 技术调用 C++ DLL 文件的实现细节。这种技术可以应用于需要 Java 和 C++ 之间互相...
JNI,全称Java Native Interface...这个“jni最简单例子”可能涵盖了以上的一些基础知识,详细注释可以帮助初学者理解JNI的工作原理和使用方法。在实际开发中,理解和熟练运用JNI是提高程序效率和扩展功能的重要手段。
2. **头文件生成**:在使用JNI前,我们需要为每个本地方法生成对应的C/C++头文件,这通常通过`javah`工具完成。这个头文件包含了Java类和方法的定义,以及JNI所需的函数原型。 3. **本地方法实现**:在生成的头文件...
我们将以"android调用JNI实例"为例,一步步解释这个过程。 首先,我们需要准备开发环境。安装Android NDK是必不可少的步骤,NDK(Native Development Kit)是一组工具,开发者可以使用它来编写用C和C++编写的本地...
总结一下,本示例提供的`testndk`项目是一个结合使用AIDL和JNI的实践案例,展示了如何在Android应用中进行跨进程通信并利用C/C++代码提升性能。通过阅读源码和配合博客文章,你可以深入理解这两种技术的工作原理和...
在这个"Android jni 编程实例"中,我们将探讨如何在Android Studio环境下进行JNI开发,通过一个简单的入门demo来学习这个过程。 首先,我们需要了解JNI的基本概念。JNI是Java平台提供的一种接口,它允许Java代码...
本实例“Jni完整实例”提供了一个完整的流程,教你如何在Eclipse环境下使用NDK进行JNI开发,并且项目可以直接运行,这对于理解JNI和NDK的工作机制非常有帮助。 首先,要理解JNI的核心概念。JNI是一种接口,它定义了...
本文将深入介绍JNI的使用和实例,帮助开发者更好地理解和应用这一技术。 首先,我们需要理解JNI的基本概念。JNI是Java平台标准版(Java SE)的一部分,提供了一套接口,使得Java代码能够无缝地与本地代码进行通信。...
这个例子展示了如何通过Java调用本地(C/C++)代码,并且提供了完整的流程,包括从Java类型转换为C类型,特别是将`jstring`转化为`char`数组。 1. **JNI基本概念**:JNI是一种接口,使得Java代码能够调用本地方法...
在这个“jni教程实例手把手”资源中,包含了多个文档和一个示例项目,旨在帮助学习者全面理解并掌握JNI的使用。 1. **Android_JNI总结.doc**:这份文档可能是对Android平台上JNI应用的总结,涵盖了JNI的基本概念、...
在这个“jni例子——使用int数组”的示例中,我们将深入探讨如何在Java和C/C++之间传递和操作int数组。 1. **JNI基础知识**: - JNI接口提供了Java与本地代码(如C/C++)通信的桥梁,使得开发者可以在Java应用中...
在本实例中,我们将探讨如何使用Eclipse集成开发环境来创建一个简单的JNI项目,实现C语言与Java之间的字符串传递。 首先,我们需要了解JNI的基本概念。JNI提供了一种方式,使得Java应用程序能够调用本地(非Java)...
【Windows下JNI初学实例】 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常重要,例如调用系统底层库、提升性能、接入硬件设备等。这篇...