2013-07-16 126 views
3

我正在使用Akka 2.2.0,Java 1.7.0_25和Eclipse Juno重寫客戶端/服務器應用程序。什麼會導致java.lang.ClassNotFoundException:[B?

我有一個示例客戶端和服務器與Akka 2.0.2一起工作。
我更新到舊的穩定版本2.1.4,並再次使所有工作。 我剛剛轉到最新的穩定版本2.2.0。

我創建了一個新的包來添加一些新的功能,而不改變現有的代碼。 改變了一些東西,現在我無法啓動我的測試用例。

這是我看到的堆棧跟蹤,當我嘗試創建一個ActorSystem:

Exception in thread "main" java.lang.ClassNotFoundException: [B 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
at akka.actor.ReflectiveDynamicAccess.getClassFor(DynamicAccess.scala:94) 
at akka.serialization.Serialization$$anonfun$4.apply(Serialization.scala:154) 
at akka.serialization.Serialization$$anonfun$4.apply(Serialization.scala:153) 
at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:697) 
at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:178) 
at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:347) 
at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:696) 
at akka.serialization.Serialization.<init>(Serialization.scala:153) 
at akka.serialization.SerializationExtension$.createExtension(SerializationExtension.scala:15) 
at akka.serialization.SerializationExtension$.createExtension(SerializationExtension.scala:12) 
at akka.actor.ActorSystemImpl.registerExtension(ActorSystem.scala:644) 
at akka.actor.ExtensionId$class.apply(Extension.scala:34) 
at akka.serialization.SerializationExtension$.apply(SerializationExtension.scala:12) 
at akka.remote.RemoteActorRefProvider.init(RemoteActorRefProvider.scala:77) 
at akka.actor.ActorSystemImpl._start(ActorSystem.scala:568) 
at akka.actor.ActorSystemImpl.start(ActorSystem.scala:575) 
at akka.actor.ActorSystem$.apply(ActorSystem.scala:103) 
at akka.actor.ActorSystem$.apply(ActorSystem.scala:98) 
at akka.actor.ActorSystem$.create(ActorSystem.scala:64) 
at akka.actor.ActorSystem.create(ActorSystem.scala) 

它抱怨它不能加載類通過方法的描述符風格字符串的字節數組「[B」。

@ som-snytt指出了兩個錯誤報告,完全描述了我所看到的錯誤。

@ paul-vargas呼出-Dsun.lang.ClassLoader.allowArraySyntax = true,它重新啓用舊的loadClass行爲。

allowArraySyntax標誌確實會使ClassNotFoundException消失,但會彈出其他錯誤。這些錯誤使我相信我的Eclipse/m2e/Scala-ide/Akka設置出了問題。

我將該項目導入到Netbeans 7.3中,並進行了清理和構建,並在第一次嘗試時進行了工作。我甚至不需要設置allowArraySyntax。

+1

你可以分享你正在使用的Akka和Java的版本嗎? –

回答

2

這會不會是新聞給大家:

http://bugs.sun.com/view_bug.do?bug_id=6500212

http://bugs.sun.com/view_bug.do?bug_id=6434149

我只能看着,最多因@保羅 - 巴爾加斯。

我注意到,在trunk中,ReflectiveDynamicAccess使用Class.forName,因爲建議使用bug報告。見the code on master

可能,您需要將您的Akka與Java版本一起升級。或者,您的生產運行時間可能會停留在1.5但您在1.7上進行開發。

+0

這些錯誤報告看起來完全正確。我仍然不確定爲什麼突然出現。 – Ryan

4

願你所需要的參數添加到VM:

-Dsun.lang.ClassLoader.allowArraySyntax=true 
+0

這解決了我所看到的錯誤。但我爲什麼開始出現仍然處於虧損狀態。我以前沒有設置這個標誌,代碼正在工作。設置此標誌後,我現在是一個NoSuchMethodError,它表明正在運行的代碼正在查找舊的依賴關係。 – Ryan

0

舊的akka​​和斯卡拉瓶子與更新後的版本一起在classpath中。不知道爲什麼它會導致上述異常,但一旦Paul指出allowArraySyntax標誌,問題就會變得明顯。

相關問題