Веб-браузер с Java-апплетом выпускает собственную библиотеку

У меня есть веб-страница с несколькими апплетами Java3D, работающими под управлением Firefox или Chromium в Ubuntu. Я могу запустить любой из апплетов, но когда я «возвращаюсь» в браузере и пытаюсь запустить другой апплет Java3D, я получаю

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

Я могу закрыть веб-браузер и перезапустить его, а затем запустить другой апплет, но повторная попытка запустить другой апплет после этого приводит к указанной выше ошибке.

В отличие от веб-браузера, я могу запускать в Eclipse столько Java3D-апплетов, сколько захочу. (Удивительно перекрывающиеся окна OpenGL в Java!)

Есть ли способ запустить апплет Java3D в браузере после запуска другого без перезапуска браузера?

Примечание. У меня такое ощущение, что уход со страницы не означает, что апплет закрыт, но все еще работает с точки зрения браузера. Возможно, Javascript, который заставляет апплет завершать работу, когда страница остается?

Если вы хотите увидеть ошибку, загрузите zip-файл с

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

извлеките и откройте index.html при развертывании для локального запуска (апплеты в Интернете вообще не запускаются - пока не там). Затем откройте один апплет, вернитесь и попробуйте запустить другой 3D-апплет.


person atmelino    schedule 03.10.2012    source источник


Ответы (1)


Уффф, это одна из худших ошибок Java Security, проблема проста, когда вы открываете страницу, ваш апплет загружает нативную библиотеку (я использую Morena для сканирования в браузере), тогда все работает нормально, но когда вы обновляете, ваш апплет пытается чтобы перезагрузить нативную библиотеку, но браузер сохраняет апплет в кеше (таким образом, его не нужно загружать снова), тогда натив уже загружен, что создает проблему безопасности, причина, по которой вы не можете дважды загрузить нативный ресурс (да, ваш апплет делает только один, но он вызывается каждый раз, когда апплет загружается, но загрузчик классов создается только в первый раз). У вас нет решения ... MUAJAJAJAJA!, нет, действительно, вы можете добавить свои библиотеки (те, которые используют собственные ресурсы) и добавить их непосредственно в свои java/расширения, но тогда аплету потребуются некоторые дополнительные шаги, а не просто загрузить апплет. Я предполагаю, что вы уже подпалили свои банки, так как это необходимо для запуска собственного кода в апплете, но до сегодняшнего дня я не могу пропустить эту проблему обновления с апплетами, которые используют Native, добавляя их только в папку расширений

person rekiem87    schedule 03.10.2012