&引用;禁止使用的包名称:java.util;在applet中的Class.forName(“java.util…”)上

&引用;禁止使用的包名称:java.util;在applet中的Class.forName(“java.util…”)上,java,reflection,applet,securityexception,Java,Reflection,Applet,Securityexception,我有一个小程序,它引用了2个签名JAR: myapplet.jar jackson-all-1.9.9.jar 当第二次启动小程序时(第一次没有错误),我得到以下信息: Exception in thread "thread applet-main.MyApplet-1" java.lang.ExceptionInInitializerError at org.codehaus.jackson.map.deser.StdDeserializerProvider.&

我有一个小程序,它引用了2个签名JAR:

  • myapplet.jar
  • jackson-all-1.9.9.jar
当第二次启动小程序时(第一次没有错误),我得到以下信息:

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
线程“thread applet main.MyApplet-1”中出现异常 java.lang.ExceptionInInitializeError 位于org.codehaus.jackson.map.desr.StdDeserializerProvider。(StdDeserializerProvider.java:81) 位于org.codehaus.jackson.map.ObjectMapper。(ObjectMapper.java:398) 位于org.codehaus.jackson.map.ObjectMapper。(ObjectMapper.java:358) 位于org.codehaus.jackson.map.ObjectMapper。(ObjectMapper.java:328) net.Remote.(Remote.java:50) 位于main.Env.init(Env.java:44) 位于main.MyApplet.init(MyApplet.java:25) 位于sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(未知源) 位于java.lang.Thread.run(未知源) 原因:java.lang.SecurityException:禁止的包名称:java.util 位于java.lang.ClassLoader.preDefineClass(未知源) 位于java.lang.ClassLoader.DefineClassSecond(未知源) 位于java.lang.ClassLoader.defineClass(未知源) 位于java.security.SecureClassLoader.defineClass(未知源) 位于sun.plugin2.applet.Applet2ClassLoader.findClass(未知源) 位于sun.plugin2.applet.Plugin2ClassLoader.loadClass0(未知源) 位于sun.plugin2.applet.Plugin2ClassLoader.loadClass(未知源) 位于sun.plugin2.applet.Plugin2ClassLoader.loadClass(未知源) 位于java.lang.ClassLoader.loadClass(未知源) 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(未知源) 位于org.codehaus.jackson.map.deser.BasicDeserializerFactory(BasicDeserializerFactory.java:74) ... 9更多 该行是以下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
}
试试看{
Class key=Class.forName(“java.util.ConcurrentNavigableMap”);
Class value=Class.forName(“java.util.ConcurrentSkipListMap”);
@抑制警告(“未选中”)
类>映射值=(类>)值;
_mapFallbacks.put(key.getName(),mapValue);
}catch(ClassNotFoundException cnfe){//发生在1.5上
}
有几件事我不明白:

  • 为什么我的Java7 JVM不将其从运行库中取出?而是
  • 为什么它试图从我的服务器下载
    /java/util/ConcurrentNavigableMap.class
    ,这显然是因为
    404
    失败了
  • 既然失败了,为什么它要连续快速地重新下载
    myapplet.jar
    25次,每次都成功(
    200
    ),每次都返回相同的jar文件
Update我不确定这25次重试是否是由类加载器试图加载类引起的,可能是其他代码试图加载资源(这仍然很奇怪,但与
CurrentNavigableMap
问题无关),因此我将从我的问题中排除这一点

注意:我猜它不会尝试重新下载jackson jar文件,因为该文件列在
缓存\u存档
属性中。

是这样吗

错误:

Class.forName("java.util.ConcurrentNavigableMap");
正确:


你确定你用的是java7吗?如果使用java.util.ConcurrentNavigableMap.Class而不是Class.forName(),会发生什么情况?根据我同时设置的java控制台,它与小程序一起启动:
1.7.0\u 07-b11 java HotSpot(TM)Client VM
使用自由浮动启动它。它每次都会得到一个新的VM,这可能会解决问题。然后将错误的详细信息报告给Oracle.Doh!我猜这是Jackson的一个bug-我会和那些家伙核实一下。刚刚向Jackson的家伙发送了一个请求:
Class.forName("java.util.concurrent.ConcurrentNavigableMap");