2012-10-03 33 views
1

我有一个带有多个Java3D applet的网页,在Ubuntu上运行Firefox或Chromium。我可以开始小程序中的任何一个,但是当我“回去”在浏览器中,并尝试启动另一个Java3D的小程序,我得到带有Java applet发布本地库的Web浏览器

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

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

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

有没有办法在浏览器中运行一个Java3D小程序后,另一个没有重新启动浏览器运行?

注:我有一种感觉,离开一个页面并不意味着该applet已关闭,但仍然在浏览器上运行。也许一个Javascript强制一个小程序结束,当页面被留下?

如果你想看到的错误,从

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

提取物,并打开index.html下载的zip文件部署到本地运行(在互联网上的小应用程序并不运行在所有 - 还没有)。然后打开一个小程序,返回,并尝试运行另一个3D小程序。

回答

0

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