使用JBuilderr实现JNI编程

做 JNI 方法如果完全用手一个个写,太麻烦,没有充份利用 IDE 
 带给我们的便利性,我来讲一下用 JBuilder和 VC6.0 IDE 环境做 
JNI 的步骤。 
1. 建一个 JB 工程。 
2. 选 File->New 或点一下工具栏的 New 图标,选第一页的 Class 
 类型,选 OK,把类名改为 HelloWorld, 包名随意,这里假设为 
空,把 Options 里面的五个选项全选上(可以酌情少选),产生 
一个新的名为 HelloWorld 或 xxx.HelloWorld 的 class。 
3. 修改一下这个 class,改成这个样子并保存: 
public class HelloWorld { 
public native void helloworld(); 
static { 
System.loadLibrary("hello"); 

public static void main(String[] args) { 
new HelloWorld().helloworld(); 


4. 这时在 project 流览器里可以看到刚刚产生的 HelloWorld.java 
 文件,在这个文件上点鼠标右键,选属性,打开 Build 属性页, 
把 Generate jni file 叉叉划上,选 OK。 
5. 编译这个 java 文件,这时将会看到在 HelloWorld.java 文件 
下面多了一个HelloWorld.h,这是我们将要用到的本地方法的头文 
件。 
6. 打开 VC,选 Tools->Options->Directries->Show directries for 
 选中 include files。 
把 /include, /include/win32 这两个目录加进去。 
7. 选 File->New,给你的工程取个名字,在 project 页里选 Win32 
 Dynamic-Link Library,按 OK,选 Empty dll project。 
8. 把开始的 HelloWorld.h 加到你的 VC 工程目录里面,并新建一 
个 HelloWorld.c(可以是你想要的任意 .c 结尾的名字)源文件。 
9. 在 HelloWorld.c 开始加上下面这几行声明: 
#include 
#include "HelloWorld.h" 
#include // 因为下面要用到 printf 语句,所以要这个头文件。 
10. 把 HelloWorld.h 里面方法声明拷贝过来,有多少拷多少,我们 
这里只有 
JNIEXPORT void JNICALL 
Java_HelloWorld_helloworld(JNIEnv *, jobject) 
并加上函数第一个参数和第二个参数的名字,方法体如下: 
JNIEXPORT void JNICALL 
Java_HelloWorld_helloworld(JNIEnv *env, jobject obj){ 
printf("Hello"); 

11. 在函数里加上任何你想要的 c 代码,按 F7,在工程的 debug 
或 release 目录下将生成一个 dll 文件,把该 dll 文件改成 hello.dll 
(也可在 project->settings->link 里面直接把生成的文件名变成 
(你想要的目录)/hello.dll),并把该 dll 放到一个你的path 环境 
设置里能找到的目录,一般放在当前目录就可以了。 
12. 运行 java HelloWorld 
如果你的 dll 和 class 都已经生成但是出现下面的异常 
java.lang.UnsatisfiedLinkError: no hello in shared library path 
at java.lang.Runtime.loadLibrary(Runtime.java) 
at java.lang.System.loadLibrary(System.java) 
at 
at java.lang.Thread.init(Thread.java) 
是因为你的 dll path 设置不正确,检查你的 java 源文件里这一行: 
System.loadLibrary("hello"); 
loadLibrary 的参数应为你的 dll 文件名,但不包括括展名,比如说 
你的 dll 文件为abc.dll,则应这样调用 
System.loadLibrary("abc"); 
而不是 
System.loadLibrary("abc.dll"); 
leaffall的package提示: 
jni方法需要加native关键字 
public native void myMethod(); 
在javah -jni MyClass产生的.h 文件中会有: 
JNIEXPORT void JNICALL 
Java_MyClass_myMethod(JNIEnv *, jobject); 
如果你的类中有包的定义(package com.leaffall) 请修改为: 
JNIEXPORT void JNICALL 
Java_com_leaffall_MyClass_myMethod(JNIEnv *, jobject)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值