2010-05-03 26 views
5

i với mã scala như thế này cho dịch vụ echo.một ngoại lệ diễn viên từ xa scala

nhập khẩu scala.actors.Actor nhập khẩu scala.actors.Actor._ nhập khẩu 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) 

nhưng có một số ngoại lệ.

 
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 

tôi không biết cách gây ra. bằng cách này. Phiên bản scala của tôi là 2.7.5

Trả lời

3

ClassNotFoundException cho biết rằng có thể đã không được biên dịch, có thể đã được biên soạn. Làm thế nào bạn biên dịch nó? Sử dụng thủ công scalac?

Hãy thử sau rm *.classscalac *.scalascala EchoServer.

Các công trình sau đây:


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

dòng lệnh:

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

Và trong thiết bị đầu cuối khác:

scala Client hello 
Các vấn đề liên quan