2012-09-10 18 views
0

我有引用2罐簽署的applet:「禁止包名稱:java.util中的」 上的Class.forName( 「java.util中...」)在小程序

  • myapplet.jar
  • 傑克遜 - 全1.9.9.jar

當啓動applet的第二次(第一次是沒有錯誤),我得到這個:

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 

李NE的問題是在以下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
  • 作爲失敗,爲什麼它 嘗試重新下載myapplet.jar 25倍快速連續,每成功一次( 200),每一次返回相同的jar文件?

更新我不知道是否25重試類加載器試圖加載類引起的,它可能是一些其他的代碼試圖加載的資源(這仍然是奇怪,但與CurrentNavigableMap問題無關),所以我會從我的問題中排除這一點。

N.B.我想它不會嘗試重新下載傑克遜jar文件,因爲該文件在cache_archive屬性中列出。

+0

你確定你使用java7?如果不使用Class.forName(),則使用java.util.ConcurrentNavigableMap.class會發生什麼? –

+0

根據Java控制檯,我同時設置爲與applet一起啓動:'1.7.0_07-b11 Java HotSpot(TM)Client VM' –

+0

使用[Java Web Start](http://stackoverflow.com/tags)/Java的Web啓動/信息)。每次都會得到一個新的虛擬機,這可能會解決問題。然後向Oracle報告錯誤的詳細信息。 –

回答

相關問題