怎么解决的。是那个main出错了吗?

解决方案 »

  1.   

    很高兴你"投奔"JAVA...替你开心....并接分......嘿嘿!
      

  2.   

    不是main出错了,是我的dll位置没放对,果然是身的此山中啊,后来我把所有的乱放的dll都删了,只放了一个的system32目录下就对了。是不是很简单呢,可我白忙活了半天就是不知道错的哪,最后莫明奇妙就对了:)
    回答过的来接分啊,哈哈,大家开心啊
      

  3.   

    这个帖子再挂一会,明天给分啊,大家不要急啊,本人一向说话算话啊!!有谁有关于.net和j2ee两者比较的链接可以跟贴啊,好的我再给分啊
      

  4.   

    TO szxbluestar(蓝色星光):
    放在system32下面确实可以解决问题。但是不应该放在system32下面。因为你的DLL动态链接库是属于你的应用程序的,而不应该属于系统。发布的时候应该一起发布,说明配置的方法,而不是简单地放在system32中了事。要是所有发布的软件都这样做,那么system32早就变成垃圾堆了。
    :)
    其实很简单,把DLL放在%PATH%路径之下就可以搞定了。
      

  5.   

    "其实很简单,把DLL放在%PATH%路径之下就可以搞定了。"能具体点吗,xiaohaiz我给你发短消息了,你收到了吗,若能解答再送你50分啊:)
      

  6.   

    呵呵,不用再加分了。看了你的短消息,具体如何部署还是得你依照实际环境来确定。
    俺在这里大致讲一下JVM如何加载动态链接库/共享目标文件的东东。希望你可以根据这些来决定你如何部署。(俺个人认为DLL不应该放在WAR中的)
    在java.lang.System中有这么一个方法:
    <<
        public static void loadLibrary(String libname)
    >>
    这个方法的作用就是根据指定的库名称加载系统库。(你如果使用了JNI,会自动被调用,而不需要你显示调用)。来看看其JAVADOC怎么说?“Loads the system library specified by the libname  argument. The manner in which a library name is mapped to the actual system library is system dependent.”
    可以看到,如何加载系统库的行为是与具体的系统相关的。
    你现在需要的是加载WIN32平台的DLL库,那么就看看DLL库如何加载呢?只要这个DLL库位于PATH路径中即可。「为什么system32下面可以?因为%WINDIR%\system32就在PATH中」。所以在你部署的时候只要保证你的DLL在PATH中。
    在很多UNIX平台,共享目标文件的命名是“lib<库名>.so”,如果说需要 HelloJni 库,那么需要的文件是 libHelloJni.so ,在UNIX下不需要设置PATH来使用so, 而是保证so在LD_LIBRARY_PATH中即可。
      

  7.   

    呵呵,我自己找到了一种方法,可以用System.load(),但是他需要绝对路径,可以用变通的方法先用getCanonicalPath()方法将dll所在的相对路径转换为绝对路径,这样就可以不需要在Path中写入相应的指向dll的路径了,可以一块将dll打包进war就可以了,发布时不需要任何特殊设置了,不过相应的本来是静态加载的System.loadlibrary(现在改为System.load方法)应该写到相应实现函数中去了,因为路径是运行时获得的。
    我已经测试通过了啊,效果不错哦。