2010-05-03 10 views
5

z takim kodem scala jak ten dla usługi echa.to wyjątek scala remote actor

importu scala.actors.Actor importu scala.actors.Actor._ importu 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) 

ale ma pewną wyjątku.

 
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 

Nie wiem jak to zrobić. przy okazji .my scala wersja 2.7.5

Odpowiedz

3

ClassNotFoundException wskazuje, że coś prawdopodobnie nie zostało skompilowane, które powinno zostać skompilowane. Jak to skompilowałeś? Ręcznie używasz scalac?

Wypróbuj następujące rm *.classscalac *.scalascala EchoServer.

następujące utwory:


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

Wiersz poleceń:

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

A w innym terminalu:

scala Client hello