我们的应用程序使用来自谷歌集合的MapMaker类,我们得到了下面的异常,但仅在使用webstart的OSX10.4上。当它从应用程序包中启动时,以及在OS X 10.5和Windows上运行得很好。
这在我们从RC2升级到RC5之后就开始发生了(我们跳过了所有中间的版本)。我们已经升级到1.0最终版本,仍然可以看到这个问题。
我怀疑与Sun的this security issue修复程序(它改变了URL.toString()在webstart中的工作方式)之间存在某种交互作用,但目前还没有任何证据。以前有没有人见过这个问题?任何帮助都是非常感谢的!
java.lang.NoClassDefFoundError: com/google/common/base/internal/Finalizer$ShutDown (wrong name: com/google/common/base/internal/Finalizer)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)
at java.lang.Class.getMethod0(Class.java:2642)
at java.lang.Class.getMethod(Class.java:1579)
at com.google.common.base.FinalizableReferenceQueue.getStartFinalizer(FinalizableReferenceQueue.java:308)
at com.google.common.base.FinalizableReferenceQueue.<clinit>(FinalizableReferenceQueue.java:102)
at com.google.common.collect.MapMaker$QueueHolder.<clinit>(MapMaker.java:836)
at com.google.common.collect.MapMaker$SoftValueReference.<init>(MapMaker.java:1078)
at com.google.common.collect.MapMaker$Strength$2.referenceValue(MapMaker.java:379)
at com.google.common.collect.MapMaker$StrategyImpl.setValue(MapMaker.java:488)
at com.google.common.collect.MapMaker$StrategyImpl.setValue(MapMaker.java:462)
at com.google.common.collect.CustomConcurrentHashMap$Impl$Segment.put(CustomConcurrentHashMap.java:960)
at com.google.common.collect.CustomConcurrentHashMap$Impl.put(CustomConcurrentHashMap.java:1438)`清单中似乎没有什么有趣的东西:
$ unzip -p google-collect.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 10.0-b19 (Sun Microsystems Inc.)发布于 2010-01-13 00:52:44
在这样的情况下,它似乎更适合file a bug with the Guava project,而不是寻求帮助,但我正在努力解释我到底为什么这么认为。
我猜这个堆栈跟踪看起来更有可能是平台中的bug或更深层次的问题,而不是你在使用库的方式上做错了什么。
发布于 2010-01-13 00:52:29
我建议您检查jar的manifest.mf文件。大概webstart使用了一个URLClassLoader,所以它按照这里的解释来定位其他jars。
听起来好像webstart找不到你正在使用的google库。这可能与您提到的修复有关。
编辑:在此处添加正确的链接-> http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download
https://stackoverflow.com/questions/2049807
复制相似问题