可能DLL不在系统路径下
那么你把该DLL放到与JAVA文件在一个目录下看看

解决方案 »

  1.   

    可以确定dll已经被装入了,,,
    然后呢?还有其他的可能么?注意错误信息。
    谢谢。
      

  2.   

    有两个地方要注意:
    1. 方法的导出,在VC(你是使用vc开发dll吗)工程中的*.def文件中加入
    你的方法导出。
    像我的是这样的:
    ; NativeCode.def : Declares the module parameters for the DLL.LIBRARY      "NativeCode"
    DESCRIPTION  'NativeCode Windows Dynamic Link Library'EXPORTS
        ; Explicit exports can go hereJava_edp_storageagent_StorageManager_initialize                @1
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2 如果你的dll使支持mfc的,请在每个java native function中加入一段

    JNIEXPORT void JNICALL Java_edp_storageagent_StorageManager_initialize
      (JNIEnv *env, jclass o,jint maxThreadNum)
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        your code;
    }如果还是不行,请将你的dll拷贝到和你的class同一个目录,再运行
      

  3.   

    我也是,命令行执行没有问题,但是jbuilder就不行了,是不是有什么相关设置
      

  4.   

    如果是命令行能执行,而jbuilder不能的话。
    请检查你的path环境,看你的dll在不在这些路径中
      

  5.   

    ///////头文件
    #ifdef __cplusplus
    extern "C" {
    #endif
    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
      (JNIEnv *, jobject);#ifdef __cplusplus
    }
    #endif///////////////////////////////cpp文件#include "HelloWorld.h"
    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject)
    {
    MessageBox(0, "test", "", MB_OK);
    return;
    }用dependency显示导出的函数名是
    _Java_HelloWorld_displayHelloWorld@8
    如果使用.def文件
    EXPORTS  Java_HelloWorld_displayHelloWorld @1
    导出的函数名就变成了Java_HelloWorld_displayHelloWorld但是执行都报出同样的错误。谁还有高见!!!
      

  6.   

    我发现了
    testjni.HelloWorld.displayHelloWorld
    是不是你的类是属于testjni包的
    那你应该在testjni目录的上层目录运行javah
    javah -jni tetestjni.HelloWorld
    这样应该在testjni目录的上层目录有个头文件
    tetestjni_HelloWorld.h
    里面的声明是
    #ifdef __cplusplus
    extern "C" {
    #endif
    JNIEXPORT void JNICALL Java_testjni_HelloWorld_displayHelloWorld
      (JNIEnv *, jobject);#ifdef __cplusplus
    }
    #endif