带有Java applet的Web浏览器发布本机库

时间:2012-10-03 22:35:30

标签: java ubuntu browser applet nativelibrary

我有一个包含多个Java3D小程序的网页,在Ubuntu上运行Firefox或Chromium。我可以启动任何一个applet,但是当我在浏览器中“返回”并尝试启动另一个Java3D applet时,我得到了

java.lang.UnsatisfiedLinkError:Native Library /lib/libj3dcore-ogl.so already loaded in another classloader

我可以关闭网络浏览器并重新启动,然后我可以启动另一个小程序,但是再一次尝试启动另一个小程序会导致上述错误。

与Web浏览器相反,我可以在Eclipse中运行尽可能多的Java3D applet。 (Java中令人惊讶的重叠OpenGL窗口!)

有没有办法在浏览器中运行Java3D小程序而另一个小程序在没有重新启动浏览器的情况下运行?

注意:我觉得离开页面并不意味着applet已关闭,但仍然在浏览器运行时运行。也许是一个强制applet在页面离开时结束的Javascript?

如果您想查看错误,请从

下载zip文件

http://jat.sourceforge.net/node/24

解压缩,并在部署中打开index.html以在本地运行(Internet上的applet根本不运行 - 还没有运行)。然后打开一个小程序,返回,然后尝试运行另一个3D小程序。

1 个答案:

答案 0 :(得分:0)

Ufff,这是Java安全性最严重的错误之一,问题很简单,当你打开页面你的applet加载本机库(我在浏览器中使用Morena for Scan)然后一切正常,但是当你刷新时,您的applet尝试重新加载本机库,但浏览器将applet保存在缓存中(这样就不需要再次下载),然后Native已经加载,产生安全问题,无法加载的原因Native Resource两次(是的,你的applet它只做一次,但每次applet加载时都调用它,但是类加载器只在第一次创建时才会被创建)。 你没有解决方案... MUAJAJAJAJA!,不,真的,你可以添加你的库(使用本机资源的库)并将它们直接添加到你的java /扩展,但applet然后需要一些额外的步骤而不是只是加载小程序。 我猜你已经烧掉了你的罐子,因为它需要在applet中运行本机代码,但直到今天我都无法跳过使用Native的applet的刷新问题,只将它们添加到扩展文件夹

相关问题