Groovy GPAR中的NullPointerException,Actor

Groovy GPAR中的NullPointerException,Actor,groovy,parallel-processing,gpars,actor-model,Groovy,Parallel Processing,Gpars,Actor Model,Groovy:1.8.6 GPAR:0.12或1.2.1 操作系统:Ubuntu 14.04 LTS @Grab(group='org.codehaus.gpars', module='gpars', version='0.12') import groovyx.gpars.actor.Actor import groovyx.gpars.actor.Actors def a = 1 def b = 100000 def reactor2 = Actors.reactor {

Groovy:1.8.6

GPAR:0.12或1.2.1

操作系统:Ubuntu 14.04 LTS

@Grab(group='org.codehaus.gpars', module='gpars', version='0.12')
import groovyx.gpars.actor.Actor


import groovyx.gpars.actor.Actors


def a = 1
def b = 100000

def reactor2 = Actors.reactor {
    println " $it"
}

def reactor1 = Actors.reactor {
    println "$it"
    reactor2 << it
}

Actor actor = Actors.actor {
    (a..b).each {reactor1 << it}
}

actor.join()

reactor1.stop()
reactor1.join()

reactor2.stop()
reactor2.join()
@Grab(group='org.codehaus.gpars',module='gpars',version='0.12')
导入groovyx.gpars.actor.actor
导入groovyx.gpars.actor.Actors
def a=1
def b=100000
def reactor2=Actors.reactor{
println“$it”
}
def reactor 1=Actors.reactor{
println“$it”

reactor2从您提供的代码示例中,我不能100%确定您试图实现的目标。似乎您正在尝试为提供的范围内的每个值指定一个
参与者,并通过打印提供的值对消息作出反应

鉴于此,您的代码存在一些问题。主要问题是缺少
循环{}
闭包,这确保
Actor
在处理一条传入消息后等待下一条传入消息

其次,调用
stop()
也没有帮助。它只是阻止
Actor
接收其他消息。在您的情况下,这不会造成任何伤害,因为您立即调用join,但会增加混乱

要使其正常工作,以下是您的代码简化为工作示例:

import groovyx.gpars.actor.Actors

def a = 1
def b = 100000

def actor = Actors.actor {
    loop {
       react {
            println it
        }
    }
}

(a..b).each {
    actor << it
}
actor.join()

你能在你的问题中加入例外吗?另外,你能使用比3年前更新的groovy版本吗?
def a = 1
def b = 100000

def reactor2 = Actors.reactor { message ->
    if(!message.equals("done")) {
        println "\t\tReact Again: $message"
    }
    return "done"
}

def reactor = Actors.reactor { message ->
    if(!message.equals("done")) {
        println "\tReact: $message"
        reactor2 << message
    }
    return "done"
}

def actor = Actors.actor {
    loop {
        react {
            if(!it.equals("done")) {
                println it
                reactor << it
            }
        }
    }
}

(a..b).each {
    actor << it
    // actor.oi
}
actor.join()