javah命令生成不了.h文件解决办法

java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了,与java环境外交互,有时java应用需要与java外面的环境交互。这是本地方法存在的主要原因,你可以想想java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供了一个非常简洁的接口,而且我们无需去了解java应用之外的繁琐的细节。
当确实需要这么做的时候,java的关键字native就至关重要了,native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如c)实现的文件中。java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(sdk)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码.
JNI的书写步骤如下:
a.编写带有native声明的方法的Java类
b.使用javac命令编译编写的Java类
c.使用java -jni ****来生成后缀名为.h的头文件
d.使用其他语言(C、C++)实现本地方法
e.将本地方法编写的文件生成动态链接库

下面是代码示例:

a.类文件

package com.mw.mbox.boss.demo;

public class HelloWorld {
	public native void hello(String name,int i, boolean b);
	
	static{
		System.loadLibrary("hello");
	}
	
	public static void main(String[] args) {
		new HelloWorld().hello("saoyong",1,true);
	}
}
b.生成class文件

window环境下cmd到java文件所在的目录,使用命令javac HelloWorld.java编译生成class文件

c.生成.h文件

使用命令javah -jni HelloWorld在生成.h文件的时候,发现目录下并没有生成的文件。

我的解决方案是set classpath=F:\svnproject\mbox-boss\src\main\java\ 然后

javah -jni com.mw.mbox.boss.demo.HelloWorld,这样就ok了,使用命令的时候要带上具体的文件目录。(我的HelloWorld.java在本地F:\svnproject\mbox-boss\src\main\java\com\mw\mbox\boss\demo\下)

 总结:在使用javah -jni命令前,先set classpath=文件所在的目录,到src那一层级,然后使用javah -jni要带上文件的包名就可以。

后面的d、e两步就不演示了,该篇博客要解决的问题到此已经处理完毕了。



猜你喜欢

转载自blog.csdn.net/cainiaobulan/article/details/79207404