我需要一些帮助来处理以下情况。
我正在使用两个需要相同本机库(.dll)文件的小程序。
因此,当我从网页运行applet时,第一个applet首次将dll加载到applet类加载器中。它工作正常。
但是当第二个applet尝试加载相同的dll时,它会给我一个例外"Error loading win32com: java.lang.UnsatisfiedLinkError: Native Library C:\WINDOWS\system32\win32com.dll already loaded in another classloader"
我使用以下方法加载驱动程序。
CommDriver driver = (CommDriver)Class.forName("com.sun.comm.Win32Driver").newInstance();
driver.initialize();
请给我解决方案
谢谢& RGDS, Rishikesh的
答案 0 :(得分:0)
简而言之,使用本机库的类的相同的 实例必须由两个类共享。
您可以通过获取系统类加载器(或当前类的类加载器的顶级父级)来执行此操作,然后动态地让它加载使用本机库的类。
如果您不知道哪个类确实加载了本机库,那么您可以创建一个代理类并加载它。该类必须为您调用其他库,以便它们将加载Proxy类类加载器(因此也可以共享)。
但是我希望安全管理器阻止您在Applet中执行此操作。
答案 1 :(得分:0)
在不同的位置加载本机库(实际上是任何库)没有任何意义。
您可以将 Applet1的 * 驱动程序 *对象设为静态。
并在 Applet2 中使用它。