2012-10-03 32 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的刷新問題,只將它們添加到擴展文件夾