scala - Scala 远程参与者异常

标签 scala remote-actors

我有一个像这样的scala代码用于回声服务。

导入 scala.actors.Actor
导入 scala.actors.Actor._
导入 scala.actors.remote.RemoteActor._

类 Echo 扩展了 Actor {
def act() {
活着(9010)
注册('我的名字,自我)

环形 {
react {
case msg => println(msg)
}
}
}
}
对象 EchoServer {

def main(args: Array[String]): unit = {
val echo = 新回声
回声开始
println("Echo 服务器已启动")
}
}
EchoServer.main(null)

但有一些异常(exception)。

java.lang.NoClassDefFoundError: Main$$anon$1$Echo$$anonfun$act$1
在 Main$$anon$1$Echo.act((虚拟文件):16)
在 scala.actors.Reaction.run(Reaction.scala:76)
在 scala.actors.Actor$$anonfun$start$1.apply(Actor.scala:785)
在 scala.actors.Actor$$anonfun$start$1.apply(Actor.scala:783)
在 scala.actors.FJTaskScheduler2$$anon$1.run(FJTaskScheduler2.scala:160)
在 scala.actors.FJTask$Wrap.run(来源不明)
在 scala.actors.FJTaskRunner.scanWhileIdling(来源不明)
在 scala.actors.FJTaskRunner.run(未知来源)
引起:java.lang.ClassNotFoundException:Main$$anon$1$Echo$$anonfun$act$1
在 java.net.URLClassLoader$1.run(URLClassLoader.java:200)
在 java.security.AccessController.doPrivileged(Native Method)
在 java.net.URLClassLoader.findClass(URLClassLoader.java:188)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:307)
在 java.lang.ClassLoader.loadClass(ClassLoader.java:252)
在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 8个

我不知道怎么会导致它。
顺便说一下,我的 Scala 版本是 2.7.5

最佳答案

ClassNotFoundException表示可能没有编译的东西,应该已经编译。你是怎么编译的?手动使用 scalac ?

试试下面的 rm *.class scalac *.scala scala EchoServer .

以下工作:

EchoServer.scala

import scala.actors.Actor
import scala.actors.Actor._
import scala.actors.remote.RemoteActor._

class Echo extends Actor {
   def act() {
        alive(9010)
        register('myName, self)

     loop {
       react {
            case msg  =>  println(msg)
       }
     }
   }
}

object EchoServer  {

   def main(args: Array[String]): unit = {
        val echo = new Echo
        echo.start
        println("Echo server started")
   }
} 

客户端.scala
import scala.actors.Actor._
import scala.actors.remote.Node
import scala.actors.remote.RemoteActor._

object Client extends Application {
    override def main(args: Array[String]) {
        if (args.length < 1) {
            println("Usage: scala Client [msg]")
            return
        }

        actor {
            val remoteActor = select(Node("localhost", 9010), 'myName)

            remoteActor !? args(0) match {
                case msg => println( "Server's response is [" + msg + "]" )
            }
        }
    }
}

命令行:
rm *.class && scalac *.scala  && scala EchoServer

而在其他终端:
scala Client hello

关于scala - Scala 远程参与者异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757182/

相关文章:

scala - 推断类型参数 [Boolean] 不符合方法过滤器的类型参数范围 [T < : slick. lifted.Rep[_]]

scala - 验证 Akka Persistence 命令的最佳实践

scala - 可以在 spark 中处理多字符分隔符

scala - 用一个值初始化 Scala 枚举值集的简写

Scala Spark 模型转换返回全零

serialization - 为什么 case 对象可序列化而 case 类不可序列化?

scala - 远程创建 Akka Actor,无需新的 ActorSystem

scala - Actor 名称不唯一 InvalidActorNameException

scala - 如何识别远程 Actor ?