2 つの署名付き jar を参照するアプレットがあります。
- myapplet.jar
- jackson-all-1.9.9.jar
アプレットを 2 回目に起動すると (1 回目はエラーなし)、次のようになります。
Exception in thread "thread applet-main.MyApplet-1"
java.lang.ExceptionInInitializerError
at org.codehaus.jackson.map.deser.StdDeserializerProvider.<init>(StdDeserializerProvider.java:81)
at org.codehaus.jackson.map.ObjectMapper.<init>(ObjectMapper.java:398)
at org.codehaus.jackson.map.ObjectMapper.<init>(ObjectMapper.java:358)
at org.codehaus.jackson.map.ObjectMapper.<init>(ObjectMapper.java:328)
at net.Remote.<init>(Remote.java:50)
at main.Env.init(Env.java:44)
at main.MyApplet.init(MyApplet.java:25)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.SecurityException: Prohibited package name: java.util
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.codehaus.jackson.map.deser.BasicDeserializerFactory.<clinit>(BasicDeserializerFactory.java:74)
... 9 more
問題の行は、次の try-catch ブロックの最初の行です。
try {
Class<?> key = Class.forName("java.util.ConcurrentNavigableMap");
Class<?> value = Class.forName("java.util.ConcurrentSkipListMap");
@SuppressWarnings("unchecked")
Class<? extends Map<?,?>> mapValue = (Class<? extends Map<?,?>>) value;
_mapFallbacks.put(key.getName(), mapValue);
} catch (ClassNotFoundException cnfe) { // occurs on 1.5
}
私が理解していないいくつかのこと:
- Java7 JVM がそれをランタイム ライブラリから取り出さないのはなぜですか? むしろ
- サーバーからダウンロードしようとする
/java/util/ConcurrentNavigableMap.class
のはなぜ404
ですか? それが失敗するのに、25 回連続して再ダウンロードを試みmyapplet.jar
、毎回成功し (200
)、毎回同じ jar ファイルを返すのはなぜですか?
更新25 回の再試行がクラス ローダーがクラスをロードしようとしていることが原因であるかどうかはわかりません。リソースをロードしようとしている他のコードである可能性があります (これはまだ奇妙ですが、CurrentNavigableMap
問題とは関係ありません)。私の質問からそれを除外します。
cache_archive
注意: Jackson jar ファイルは属性にリストされているため、再ダウンロードしようとはしないと思います。