我有一個理論,爲什麼我有以下問題,但我找不到任何證明我的理論的文檔,所以我想要一些建議。重新加載DLL中的Applet在瀏覽器中
我有一個加載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。我不認爲瀏覽器版本特別重要,因爲我的理解是,瀏覽器決定使用applet是完全由瀏覽器實施者決定的。
這些假設看起來是否合理和正確?我可能錯過了什麼?
非常感謝提前。