Chinaunix首页 | 论坛 | 博客
  • 博客访问: 159503
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-23 15:21
文章分类

全部博文(66)

文章存档

2016年(66)

我的朋友

分类: WINDOWS

2016-06-02 17:09:52

下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。

1:编写java代码
我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示
class HelloWorld 
{
    public native void displayHelloWorld();
    static {
        System.loadLibrary("hello");   
    }
    
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }
}
注意我们的displayHelloWorld()方法的声明,①:它有一个关键字native,表明这个方法使用java以外的语言实现|。方法不包括实现,因为我们要用c/c++语言实现它。②:注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so)


2:编译java代码
①:javac HelloWorld.java  生成HelloWorld.class文件


3:创建.h文件
这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行
①:javah HelloWorld。这样我们可以看到在相同目录下生成了一个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:    displayHelloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld     HelloWorld:程序名字, displayHelloWorld:函数名字
  (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif


4:编写本地实现代码
在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下
#include
#include "HelloWorld.h"  (①:这里的头文件就是javah生成的头文件
#include


JNIEXPORT void JNICALL 
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)     (java:表示给java调用的,HelloWorld:程序名字, displayHelloWorld:函数名字
{
    printf("Hello world!/n");
    return;
}
注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。①:编译通过后再生成hello.dll文件。


5:运行java程序
把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world|
的输出了。


阅读(1260) | 评论(0) | 转发(0) |
0

上一篇:let命令--数据计算

下一篇:冒泡排序

给主人留下些什么吧!~~