参考java.sun.com上提供的文章。或者在,Java 2核心技术(2) 高级特性中有讲解。

解决方案 »

  1.   

    worldheart(时讯技术) :
    我按java.sun.com上提供的简单displayHelloWorld例子做后,运行后提示:
    java.lang.UnsatisfiedLinkError: displayHelloWorld
    at jnitst2.HelloWorld.displayHelloWorld(Native Method)
    at jnitst2.HelloWorld.main(HelloWorld.java:20)
    Exception in thread "main" 
    不知道什么原因?
      

  2.   

    我的文件目录如下,在包jnitst中:
    projectname\src\jnitst\HelloWrold.java
    projectname\classes\jnitst\HelloWrold.class
    projectname\classes\jnitst\HelloWrold.h
    projectname\classes\jnitst\HelloWroldImp.c
    projectname\classes\jnitst\HelloWrold.dll
    然后在环境变量中设置path为projectname\classes\jnitst,在classpath中设置该目录projectname\classes\jnitst\HelloWrold.dll,
    运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found. 
    要用javah -jni -classpath D;\...\jnitst\ HelloWorld,才能生成头文件. 
    这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError?
      

  3.   

    classpath中不用设置projectname\classes\jnitst\HelloWrold.dll
    只要设置projectname\classes\jnitst\就可以了,
    set CLASSPATH=%CLASSPATH%;projectname\classes\jnitst\
      

  4.   

    另外把DLL防到你的系统目录试试
      

  5.   

    javah -jni HelloWorld中HelloWorld有包吗?应是
    javah -jni 包.HelloWorld
      

  6.   

    如果你真的有兴趣的话,我推荐一篇文章给你看看的。绝对你对帮助很大的,本来对JNI编程也很有兴趣的。http://www.javaworld.com/javaworld/jw-10-1999/jw-10-jni_p.html
      

  7.   

    http://www-900.ibm.com/developerWorks/cn/education/java/j-jni/tutorial/强烈建议来着看看,我的jni启蒙教程
      

  8.   

    ye_cl(ye_cl) :你只能把调用dll的文件放在第一级目录下
    即把projectname\classes\jnitst\HelloWrold.class
    改成projectname\HelloWrold.class
    可以把dll放到系统目录下。
    这可能是jar的设计问题,因为dll被装载进来是以包的路径为参照的,所以如果你不放到第一级目录的话,它会找不到dll的内存地址。
      

  9.   

    我也有一个问题:
    我已经成功的调用vc++做的动态连接库(active控件),不过我没有明白的是我可以调用控件的方法,当我调用它的属性(get_***,put_***)的时候就出现问题啦。
    请问有人知道吗?