解决JNI生成头文件找不到类的问题

最近在研究JNI。一开始着手就遇到问题。考虑了一整个上午,问题终于是解决了。在兴奋之余,觉得应该提供方法给正在此路纠结的同志们.

代码:

public class HelloJni{
    
     public native void displayHelloJni();

     static {
            
           System.loadLibrary("helloJni");
 
     }

     public static void main(String []args){
  
             System.out.println(System.getProperty("java.library.path"));
                
                   new HelloJni().displayHelloJni();

         }

  }


在HelloJni.java编译后生成.class文件后,就是生成头文件的时刻了。可是用javah -classpath.HelloJni老是出错,找不到HelloJni类。

情况一:在cmd上运行的java

 记得如果老是提示:无法访问HelloJni

                                    未找到 HelloJni 的类文件

                                    javadoc:错误-未找到类 HelloJni。

                                    Error:未在命令行中指定任何类。请尝试使用-help。

此时:问题1:直接看看你的-classpath . 中的“.”是否前后都有空格存在。正确写法是“.”前后都要有空格存在,javah -classpath . HelloJni

OK,再次运行就成功了。

            问题2:路径出现问题。见情况二解决方法。

情况二:在eclipse上运行过的java。

假如有这样的类HelloJni.java在包hwjni中。

假如项目目录是:D:\Program Files\VC++6.0\eclipse-java-indigo-SR2-win32\eclipse\workspace\hw,那么编译后生成的class文件会位于D:\Program Files\VC++6.0\eclipse-java-indigo-SR2-win32\eclipse\workspace\hw\bin\hwjni现在希望用JAVAH生成头文件。生成的头文件会在:D:\Program Files\VC++6.0\eclipse-java-indigo-SR2-win32\eclipse\workspace\hw\bin下。

利用cmd,生成头文件命令语句:javah -classpath . hwjni.HelloJni
也就是说,指定类的路径时,应该以包所在路径为准,而不是具体类所在的子目录

 

 

你可能感兴趣的:(.dll,JNI,javah)