本机库已加载到另一个类加载器中

发布于 2024-09-19 02:18:51 字数 469 浏览 7 评论 0原文

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

我正在使用两个需要相同本机库 (.dll) 文件的小程序。

因此,当我从网页运行小程序时,第一个小程序第一次将 dll 加载到小程序类加载器中。效果很好。 但是,当第二个小程序尝试加载相同的 dll 时,它给出了异常:“加载 win32com 时出错:java.lang.UnsatisfiedLinkError:本机库 C:\WINDOWS\system32\win32com.dll 已在另一个类加载器中加载”

我使用以下方法来加载驱动程序。

CommDriver driver = (CommDriver)Class.forName("com.sun.comm.Win32Driver").newInstance();
driver.initialize();

请给我解决方案

谢谢&平均值, 瑞诗凯诗

I need some help to handle following scenario.

I am using two applets which requires the same native library (.dll) file.

So when I run the applets from the web pages, for the first time first applet loads the dll into the applet class loader. It works fine.
But when second applet tries to load the same dll it gives me exception saying that "Error loading win32com: java.lang.UnsatisfiedLinkError: Native Library C:\WINDOWS\system32\win32com.dll already loaded in another classloader"

I using following method to load the driver.

CommDriver driver = (CommDriver)Class.forName("com.sun.comm.Win32Driver").newInstance();
driver.initialize();

Please give me the solution

Thanks & Rgds,
Rishikesh

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

懵少女 2024-09-26 02:18:51

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

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

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

不过,我希望安全管理器能够阻止您在 Applet 中执行此操作。

In short, the same instance of the class that uses the native library must be shared by both classes.

You can do this by getting the system class loader (or the top parent of the class loader of your current class) and then dynamically have it load the class which uses the native library.

If you don't know which class does load the native library then you can make a proxy class and load this isntead. The class must call to the other libraries for you so they will be loaded with the Proxy classes classloader (and so also be shared).

However I would expect the security manager to prevent you from doing this within an Applet.

岁月流歌 2024-09-26 02:18:51

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

There is no point in loading the Native Library(as a matter of fact any library)twice in different locations.
You can make Applet1's *driver* object as static.
And use it in Applet2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文