2010-05-03 10 views
5

ich mit einem Scala-Code wie folgt für Echo-Service.eine Scala Remote Actor Ausnahme

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") 
    } 
} 
EchoServer.main(null) 

aber es einige Ausnahme hat.

 
java.lang.NoClassDefFoundError: Main$$anon$1$Echo$$anonfun$act$1 
at Main$$anon$1$Echo.act((virtual file):16) 
at scala.actors.Reaction.run(Reaction.scala:76) 
at scala.actors.Actor$$anonfun$start$1.apply(Actor.scala:785) 
at scala.actors.Actor$$anonfun$start$1.apply(Actor.scala:783) 
at scala.actors.FJTaskScheduler2$$anon$1.run(FJTaskScheduler2.scala:160) 
at scala.actors.FJTask$Wrap.run(Unknown Source) 
at scala.actors.FJTaskRunner.scanWhileIdling(Unknown Source) 
at scala.actors.FJTaskRunner.run(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: Main$$anon$1$Echo$$anonfun$act$1 
at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
... 8 more 

ich weiß nicht, wie kann es dazu führen. übrigens .my scala version ist 2.7.5

Antwort

3

ClassNotFoundException zeigt an, dass etwas wahrscheinlich nicht kompiliert wurde, das hätte kompiliert werden sollen. Wie hast du es kompiliert? Manuelle Verwendung scalac?

Versuchen Sie Folgendes rm *.classscalac *.scalascala EchoServer.

Die folgenden Werke:


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") 
    } 
} 

Client.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 + "]") 
      } 
     } 
    } 
} 

Befehlszeile:

rm *.class && scalac *.scala && scala EchoServer 

Und in anderen Terminal:

scala Client hello 
Verwandte Themen