1

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

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

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

与 Web 浏览器相反,我可以在 Eclipse 中运行任意数量的 Java3D 小程序。(Java 中惊人的重叠 OpenGL 窗口!)

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

注意:我有一种感觉,离开页面并不意味着小程序关闭,但就浏览器而言仍在运行。也许是一个 Javascript 会在页面离开时强制小程序结束?

如果要查看错误,请从以下位置下载 zip 文件

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

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

4

1 回答 1

0

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

于 2012-10-03T23:09:19.167 回答