У меня есть теория, почему у меня возникает следующая проблема, но я не могу найти документацию, подтверждающую мою теорию, так или иначе, поэтому я хотел бы получить некоторый совет.
У меня есть (подписано) апплет, который загружает DLL.Теперь, в прошлую пятницу, я нажимал «Обновить», и апплет перезагружался нормально, включая, очевидно, перезагрузку DLL.Но сегодня нажатие кнопки «Обновить» вызывает следующее исключение:
java.lang.UnsatisfiedLinkError: Native Library XXX already loaded in another classloader
В соответствии с Javadoc (Java 6) System.loadLibrary является вспомогательным методом для Runtime.loadLibrary и в соответствии с этой документацией:
Если этот метод вызывается более одного раза с одним и тем же именем библиотеки, второй и последующие вызовы игнорируются.
Я знаю и понимаю, что вы не можете загрузить одну и ту же собственную библиотеку вразные загрузчики классов в одной и той же JVM, что объясняет вышеупомянутое исключение.То, что я пытаюсь доказать, это то, почему в один прекрасный день это сработало, а сейчас нет.Особенно с учетом того, что в процессе загрузки DLL не было никаких изменений кода.
Так что мои предположения таковы:
- В приведенной выше документации следует прочитать "второй и последующие вызовы * втот же загрузчик классов * игнорируется
- В прошлую пятницу планеты находились в другом выравнивании, и поэтому браузер использовал другую JVM (или, возможно, тот же загрузчик классов?), когда я нажимал на обновление, поэтому DLLбыл загружен правильно, и все работало хорошо.
- Сегодня планеты выровнены по-разному, и браузер повторно использует ту же JVM, но другой загрузчик классов, и это объясняет, почему я получаю эту ошибку сейчас.
Кстати, рассматриваемый браузер был IE7, и я использую Java 1.6. Я не думаю, что версия браузера особенно важна, так как я понимаю, что то, что браузер решает делать с апплетом, полностью зависит от браузера.реализатор.
Эти предположения кажутся разумными и правильными?t Я пропустил?
Заранее большое спасибо.