gpt4 book ai didi

java - 主 Actor 上的 Scala/Akka NullPointerException

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:34 25 4
gpt4 key购买 nike

我正在学习用于scala并行处理的akka​​框架,并且我试图将java项目迁移到scala,这样我就可以同时学习akka和scala。在工作人员中进行一些计算后尝试从工作人员 Actor 接收可变对象时,我在主 Actor 上收到 NullPointerException 。所有代码如下...

    import akka.actor._
import java.math.BigInteger
import akka.routing.ActorRefRoutee
import akka.routing.Router
import akka.routing.RoundRobinRoutingLogic

object Main extends App {

val system = ActorSystem("CalcSystem")
val masterActor = system.actorOf(Props[Master], "master")
masterActor.tell(new Calculate, ActorRef.noSender)
}

class Master extends Actor {

private val messages: Int = 10;
var resultList: Seq[String] = _

//val workerRouter = this.context.actorOf(Props[Worker].withRouter(new RoundRobinRouter(2)), "worker")

var router = {
val routees = Vector.fill(5) {
val r = context.actorOf(Props[Worker])
context watch r
ActorRefRoutee(r)
}
Router(RoundRobinRoutingLogic(), routees)
}

def receive() = {
case msg: Calculate =>
processMessages()
case msg: Result =>
resultList :+ msg.getFactorial().toString
println(msg.getFactorial())

if (resultList.length == messages) {
end
}
}

private def processMessages() {
var i: Int = 0
for (i <- 1 to messages) {
// workerRouter.tell(new Work, self)
router.route(new Work, self)
}
}

private def end() {
println("List = " + resultList)
this.context.system.shutdown()
}
}


import akka.actor._
import java.math.BigInteger

class Worker extends Actor {

private val calculator = new Calculator

def receive() = {
case msg: Work =>
println("Called calculator.calculateFactorial: " + context.self.toString())
val result = new Result(calculator.calculateFactorial)
sender.tell(result, this.context.parent)

case _ =>
println("I don't know what to do with this...")

}
}


import java.math.BigInteger

class Result(bigInt: BigInteger) {

def getFactorial(): BigInteger = bigInt

}

import java.math.BigInteger

class Calculator {

def calculateFactorial(): BigInteger = {

var result: BigInteger = BigInteger.valueOf(1)
var i = 0

for(i <- 1 to 4) {
result = result.multiply(BigInteger.valueOf(i))
}
println("result: " + result)
result
}
}

最佳答案

您使用 null 初始化 resultList,然后尝试附加一些内容。

关于java - 主 Actor 上的 Scala/Akka NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com