java - 小程序中 Class.forName( "Prohibited package name: java.util") 上的 "java.util..."

标签 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.<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 block 中的第一行:

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 来 self 的服务器,显然失败并显示 404
  • 既然失败了,为什么它尝试重新下载myapplet.jar快速连续 25 次,每次都成功 ( 200 ),并且每次都返回相同的 jar 文件?

更新 我不确定这 25 次重试是否是由类加载器尝试加载类引起的,可能是其他一些代码尝试加载资源(这仍然很奇怪,但与 CurrentNavigableMap 问题无关),所以我会将其从我的问题中排除。

注意我猜它不会尝试重新下载 jackson jar 文件,因为该文件已在 cache_archive 中列出。属性。

最佳答案

这是吗?

错误:

Class.forName("java.util.ConcurrentNavigableMap");

正确:
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/package-tree.html

Class.forName("java.util.concurrent.ConcurrentNavigableMap");

关于java - 小程序中 Class.forName( "Prohibited package name: java.util") 上的 "java.util...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345068/

相关文章:

c# - 获取带有字符串值的类属性列表

java - 小程序重绘频率

java - 如何构建算法以根据关键字对 HTML 页面进行分类?

java - Android 线程中的全局变量

c# - 使用反射调用具有参数的方法

java - 如何使用 javascript 但没有 deployJava.js 找出 java 版本?

java - 加载小程序时出现 ClassNotFoundException

java - 构建路径上的冲突文件

java - 将 JAXB、泛型和反射结合到 XML 序列化我所有的 Java 类

java - 对类进行反射是否会意外调用方法(例如静态构造函数)?