我使用JSP调用Applet,Applet通过本地方法调用动态链接库,签名后访问本地文件进展顺利一个很麻烦的问题是,当我在一个页面使用了Applet后,再也无法使用其他的加载了访问本地文件的动态库的Applet(除非关闭整个系统页面重新访问站点)错误信息如下:java.lang.UnsatisfiedLinkError: Native Library C:\WINNT\system32\test.dll already loaded in another classloader at java.lang.ClassLoader.loadLibrary0(Unknown Source) at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System.loadLibrary(Unknown Source) at cn.xx.xxx.xxxx.xxxxxx.<clinit>(Mwic_32_hx4428.java:5) at cn.xx.xxx.xxxx.xxxxx.init(Usercard_2250.java:1160) at cn.xx.xxx.xxxx.xxxxx.<init>(Usercard_2250.java:185) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at sun.applet.AppletPanel.createApplet(Unknown Source) at sun.plugin.AppletViewer.createApplet(Unknown Source) at sun.applet.AppletPanel.runLoader(Unknown Source) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)根据Native Library C:\WINNT\system32\test.dll already loaded in another classloader来看,似乎是被占用的资源C:\WINNT\system32\test.dll始终没有释放,然而不明白的是:当我关闭当前加载了Applet的页面的时候,Applet应该退出了啊,相应资源也应该释放了不是?为什么非要关闭与当前会话所有相关的页面才可以呢?事实上,这里没有跟会话扯上任何关系啊~~请清楚原委的朋友指点一二,不胜感激(给80份吧,嘿嘿~)

解决方案 »

  1.   

    你可以直接调用已经加载的dll布?
      

  2.   

    直接调用已经加载的dll?  
    抱歉我没有说清楚,如果dll是在同一个jar包里调用,调用多少遍都没有关系(刷新页面就不行了,报同样的错误:Native Library C:\WINNT\system32\test.dll already loaded in another classloader)但是我的applet需要客户端下载的,所有不相干的类文件不会打在一起(便于下载的快捷),但是使用的动态库文件是相同的。这样的话一次只有一个包有效,要使用另外一个包,必须重新打开系统(关闭所有与但前页面有同属一个会话的页面)谢谢楼上的朋友的参与,希望更多的朋友予以指点,谢谢