DLL文件名称:InfoAuto.dll
我把这个文件放在\Java\jdk1.5.0_04\bin里,此目录已经在环境变量配置过了public class testdll {
static {
System.loadLibrary("InfoAuto");
} public native static ArrayList Info(String start, String end); public static void main(String[] args) {

testdll dll=new testdll(); dll.Info("2009-01-01","2009-12-30");
}
}
结果报错
Exception in thread "main" java.lang.UnsatisfiedLinkError: Info
at dll.testdll.Info(Native Method)
at dll.testdll.main(testdll.java:18)这个大概是怎么回事?怎么解决??

解决方案 »

  1.   

    你用eclipse么?
    如果用的话,我告诉你怎么指定native目录:
    工程上右键->属性->Java Build Path -> Source ->找到你的native调用的java文件所在的源文件夹,展开
    这个时候你会发现下面有三个子项目:
    Include
    Exclude
    Native library location
    选择Native library location,然后点右边的edit按钮。
    然后选择dll文件所在的目录。
    其实,最好的做法是在你的工程下建个lib文件夹,把dll文件也一并放在这个地方。这样移植会方便的多。
    另外,你可以参照一下java.lang.System类的源代码,里面有基础native调用。
      

  2.   


    你好,我用的MyEclipse
    我按照你说的方法,给工程配置了dll文件的目录,但是还是出现刚才的错误
    这个是怎么回事?我感觉应该是DLL文件已经找到了
    但是调用Info 方法时出错了?是这样吗?
      

  3.   

    public class UnsatisfiedLinkErrorextends LinkageError当 Java 虚拟机无法找到声明为 native 的方法的本地语言定义时,抛出该错误。 看样子还是没找到。
    你把环境变量里的那个native配置去掉,然后clean工程。
    如果还有问题的话,InfoAuto.dll这个文件能否发给我一份:
    [email protected]
      

  4.   

    结果报错
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Info
    at dll.testdll.Info(Native Method)
    at dll.testdll.main(testdll.java:18)这个大概是怎么回事?怎么解决?? InfoAuto.dll已找到,但Info(...)方法没有找到。
    原因在InfoAuto.cpp中查找。与JAVA代码与dll文件的位置无关。
      

  5.   

    我这没有.cpp文件
    这个文件是和DLL一起的吗?
      

  6.   

    dll文件是要放到java.library.path这个jvm的环境变量里面的
    System.getProperty("java.library.path")
    可以查看
      

  7.   

    这说明这个DLL不是楼主自己生成的.原因很清楚:是JAVA在DLL中找不到Info方法.楼主要确保在DLL中一定有Info(...)这个方法.可能是楼主方法名记错了(原本就不是Info(..))或可能DLL不是标准的DLL.
      

  8.   

    这个DLL文件是别人给我的,他告诉我dll里有
    Info(startdate:PChar;enddate:PChar):TList;
    我不太清楚他这个定义的是什么类型,不过他说的就是Info(String,Sting)返回list
    那看来是他dll做的不标准?
      

  9.   


    我估计这个DLL就不是楼主的.其是别人的DLL,而且可能非标准,即JAVA不能直接调用,如何办?
    这种情况很常见:我用JNI做过好多这种情况.
    很简单[建议的做法是]:楼主自己用VC60的CPP写一个很小的标准DLL,由你这个DLL去调用那个不标准的DLL.
    而你自己的JAVA通过JNI直接调用你自己的DLL就行了.这样做的好处是:在自己的DLL中,可包含进行类型转换或其它简化功能处理的代码.这样你的JAVA程序更好写了.