JNI类如果不添加包头,可以用Javah编译过去,但普通Java文件访问JNI类就会出现有包类访问无包类的问题。package com.test.java;import Sample1; //JNI 错误:The import Sample1 cannot be resolved
JNI类如果添加包头,就无法用Javah编译过去。D:\JavaWorkspace\JNITest>javah com.test.java.Sample1
错误:无法访问 com.test.java.Sample1
未找到 com.test.java.Sample1 的类文件
javadoc: 错误 - 找不到类 com.test.java.Sample1。
Error: 未在命令行中指定任何类。请尝试使用 -help。D:\JavaWorkspace\JNITest>javah com.test.java.Sample1.class
错误:无法访问 com.test.java.Sample1.class
未找到 com.test.java.Sample1.class 的类文件
javadoc: 错误 - 找不到类 com.test.java.Sample1.class。
Error: 未在命令行中指定任何类。请尝试使用 -helpD:\JavaWorkspace\JNITest>javah -classpath com\test\java Sample1
错误:无法访问 Sample1
错误的类文件: com\test\java\Sample1.class
类文件包含错误的类: com.test.java.Sample1
请删除该文件或确保该文件位于正确的类路径子目录中。
com.sun.tools.javac.util.Abort
        at com.sun.tools.javac.comp.Check.completionError(Check.java:164)
        at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:149)
        at com.sun.tools.javadoc.RootDocImpl.<init>(RootDocImpl.java:77)
        at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:15
)
        at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:330)
        at com.sun.tools.javadoc.Start.begin(Start.java:128)
        at com.sun.tools.javadoc.Main.execute(Main.java:66)
        at com.sun.tools.javah.Main.main(Main.java:147)
javadoc: 错误 - 致命错误
2 错误
各位高手,能否帮我看看怎么回事。

解决方案 »

  1.   

    你把Sample1.class放在com\test\java目录下
    然后执行javah com.test.java.Sample1不就行了?
      

  2.   

    你要把Sample1放在com/test/java目录下,然后再执行javah com.test.java.Sample1 
      

  3.   

    Sample1.class 已经在com\test\java目录下了,
    用命令:
    d:\JavaWorkspace\JNITest>javah com.test.java.Sample1
    错误:无法访问 com.test.java.Sample1
    未找到 com.test.java.Sample1 的类文件
    javadoc: 错误 - 找不到类 com.test.java.Sample1。
    Error: 未在命令行中指定任何类。请尝试使用 -help。1、2、3楼,帮忙看看!谢谢!
      

  4.   

    Sample1.java 如下:package com.test.java;
    public class Sample1                                  
     {                                                     
       public native int intMethod(int n);                 
       public native boolean booleanMethod(boolean bool);  
       public native String stringMethod(String text);     
       public native int intArrayMethod(int[] intArray);   
                                                           
       public static void main(String[] args)              
       {                                                   
         System.loadLibrary("Sample1");                    
         Sample1 sample = new Sample1();                   
         int     square = sample.intMethod(5);             
         boolean bool   = sample.booleanMethod(true);      
         String  text   = sample.stringMethod("JAVA");     
         int     sum    = sample.intArrayMethod(           
                             new int[]{1,1,2,3,5,8,13} );  
                                                           
         System.out.println("intMethod: " + square);       
         System.out.println("booleanMethod: " + bool);     
         System.out.println("stringMethod: " + text);      
         System.out.println("intArrayMethod: " + sum);     
       }                                                   
     }                                                     
      

  5.   

    要睡觉了自己看吧
    http://blog.csdn.net/sunyujia/archive/2007/10/19/1833621.aspx
      

  6.   

    javah -classpath . com.test.java.Sample1 
      

  7.   

    虽然已结贴,公布一下答案留给后人:要在系统环境变量中加上:ClassPath = .;D:\Java\jdk1.6.0_06\lib\dt.jar;D:\Java\jdk1.6.0_06\lib\tools.jarD:\Java\jdk1.6.0_06换成你自己的JDK路径。这时再javah com.test.java.Example1就没有问题了。另外,编译后的头文件名为,com_test_java_Sample1.h,里面的function也
    增加了Java_com_test_java_Sample1_ 前缀,注意实现DLL时不要写错。