什么会导致java.lang.ClassNotFoundException: [B错误?

3
我正在使用Akka 2.2.0、Java 1.7.0_25和Eclipse Juno重新编写一个客户端/服务器应用程序。
我已经使用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版本吗? - Endre Varga
3个回答

4

您可能需要向VM添加参数:

-Dsun.lang.ClassLoader.allowArraySyntax=true

这解决了我看到的错误。但我仍然不知道为什么它开始出现。我以前没有设置这个标志,代码也能正常工作。在设置这个标志后,我现在遇到了NoSuchMethodError,这表明运行的代码正在找到旧的依赖项。 - Ryan

2

这些错误报告看起来完全正确。我仍然不确定为什么突然出现了这个问题。 - Ryan

0

在更新版本的情况下,旧的akka和scala jar包仍然存在于类路径中。不确定为什么会引起上述异常,但一旦Paul指出了allowArraySyntax标志,问题就变得明显了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接