2010-05-03 11 views
5

मैं इको सेवा के लिए इस तरह के एक स्कैला कोड के साथ।एक स्कैला रिमोट अभिनेता अपवाद

आयात scala.actors.Actor आयात scala.actors.Actor._ आयात 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) 

लेकिन कुछ अपवाद वहाँ है।

 
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 

मुझे नहीं पता कि इसका कारण कैसा हो सकता है। जिस तरह से। मेरा स्कैला संस्करण 2.7.5

उत्तर

3

ClassNotFoundException इंगित करता है कि शायद कुछ संकलित नहीं किया गया था, जिसे संकलित किया जाना चाहिए था। आपने इसे कैसे संकलित किया? मैन्युअल रूप से scalac का उपयोग कर रहे हैं?

निम्नलिखित rm *.classscalac *.scalascala 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") 
    } 
} 

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

कमांड लाइन:

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

और अन्य टर्मिनल में:

scala Client hello 
संबंधित मुद्दे