java.lang.NoClassDefFoundError: com / google / common / base / interno / Finalizer $ arresto (nome sbagliato: com / google / common / base / interno / Finalizer)

StackOverflow https://stackoverflow.com/questions/2049807

Domanda

La nostra applicazione utilizza la classe MapMaker da collezioni di Google, e stiamo ottenendo l'eccezione di seguito, ma solo su OS X 10.4 con webstart. Funziona bene quando lanciato da un fascio di app, e su OS X 10.5 e Windows.

Questa è iniziato accadendo da quando il nostro aggiornamento da RC2 a RC5 (abbiamo saltato tutte le versioni intermedie). Abbiamo dato un upgrade a 1,0 finale e ancora vedere il problema.

Ho il sospetto che qualche interazione con la correzione di Sun per questo problema di sicurezza (che ha cambiato il modo in cui URL.toString () lavora in webstart), ma non hanno alcuna prova ancora. Qualcuno ha visto questo problema prima? Ogni aiuto è molto apprezzato!

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

Ci non sembra essere qualcosa di interessante nel manifesto:

$ 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.)
È stato utile?

Soluzione

In un caso come questo, sembra molto più appropriato per un bug con il progetto Guava , piuttosto che chiedere aiuto su SO, ma sto lottando per spiegare perché esattamente credo di sì.

Credo che questo stack trace sembra solo molto più probabile che sia un bug o di un problema più profondo nella piattaforma, che qualcosa si sta facendo sbagliato nel modo in cui si sta utilizzando la libreria.

Altri suggerimenti

Vi suggerisco di controllare il file MANIFEST.MF del vostro vaso. Presumibilmente webstart utilizza un URLClassLoader, ne consegue la spiegazione qui per individuare altri vasi.

Sembra webstart non riesce a trovare la libreria di Google che si sta utilizzando. Questo potrebbe essere correlato al correzione che lei ha citato.

Modifica aggiungendo il link corretto qui -> http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html#download

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top