簡體   English   中英

java.lang.NoClassDefFoundError:com / google / common / base / internal / Finalizer $ ShutDown(錯誤名稱:com / google / common / base / internal / Finalizer)

[英]java.lang.NoClassDefFoundError: com/google/common/base/internal/Finalizer$ShutDown (wrong name: com/google/common/base/internal/Finalizer)

我們的應用程序使用Google集合中的MapMaker類,並且在下面得到了例外,但僅在使用Webstart的OS X 10.4上。 從應用程序捆綁啟動時,以及在OS X 10.5和Windows上,它都能正常工作。

自從RC2升級到RC5(我們跳過了所有中間版本)以來,這種情況已經開始發生。 此后,我們已經升級到1.0最終版,仍然可以看到該問題。

我懷疑與Sun的此安全修復程序有一些互動(此更改更改了Webstart中URL.toString()的工作方式),但還沒有任何證據。 有人看過這個問題嗎? 任何幫助是極大的贊賞!

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.)

在這樣的情況下,向Guava項目提交bug似乎比在SO上尋求幫助更合適,但是我正在努力解釋為什么會這樣。

我想這個堆棧跟蹤似乎很可能是平台中的錯誤或更深層次的問題,而不是您使用庫的方式做錯了。

我建議您檢查jar的manifest.mf文件。 大概webstart使用URLClassLoader,因此它按照此處的說明查找其他jar。

聽起來好像webstart找不到您正在使用的google庫。 這可能與您提到的修復程序有關。

編輯:在此處添加正確的鏈接-> http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM