Native Library已经加载到另一个类加载器中

时间:2010-09-16 07:08:52

标签: java applet classloader

我需要一些帮助来处理以下情况。

我正在使用两个需要相同本机库(.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的

2 个答案:

答案 0 :(得分:0)

简而言之,使用本机库的类的相同的 实例必须由两个类共享。

您可以通过获取系统类加载器(或当前类的类加载器的顶级父级)来执行此操作,然后动态地让它加载使用本机库的类。

如果您不知道哪个类确实加载了本机库,那么您可以创建一个代理类并加载它。该类必须为您调用其他库,以便它们将加载Proxy类类加载器(因此也可以共享)。

但是我希望安全管理器阻止您在Applet中执行此操作。

答案 1 :(得分:0)

在不同的位置加载本机库(实际上是任何库)没有任何意义。 您可以将 Applet1的 * 驱动程序 *对象设为静态
并在 Applet2 中使用它。