Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
播放Java Akka-Await.result,期望等待的对象而不接受未来<;对象>;_Java_Akka - Fatal编程技术网

播放Java Akka-Await.result,期望等待的对象而不接受未来<;对象>;

播放Java Akka-Await.result,期望等待的对象而不接受未来<;对象>;,java,akka,Java,Akka,我不熟悉框架和AKKA,我是一名Java开发人员。我使用Play 2.3.7和IntelliJ 14。我调用了Pattern.ask,它返回一个Future对象,该对象具有来自web服务调用的字符串。通过控制台,我可以发现我的参与者能够接收请求并执行操作。我不知道如何解析它。我试图用wait.result来解读未来。但是这个wait.result需要等待的对象。若我传递Future对象,它将抛出编译器异常。请帮忙 public Result invoke(String message) { t

我不熟悉框架和AKKA,我是一名Java开发人员。我使用Play 2.3.7和IntelliJ 14。我调用了Pattern.ask,它返回一个Future对象,该对象具有来自web服务调用的字符串。通过控制台,我可以发现我的参与者能够接收请求并执行操作。我不知道如何解析它。我试图用wait.result来解读未来。但是这个wait.result需要等待的对象。若我传递Future对象,它将抛出编译器异常。请帮忙

public Result invoke(String message) {

try {
    System.out.println("invoke ");
    MySampleMessage msg = new MySampleMessage(message);
    System.out.println(msg.getMessage());
    Future<Object> futr = (Future<Object>) Patterns.ask(myActor, msg, localConfig.getTimeOut());
    System.out.println("invoke 1");
    ////Promise<Object> promise = Promise.wrap(futfure);

    String msg1 = Await.result(futr, Duration.create(10, TimeUnit.MILLISECONDS));
    System.out.println("invoke 2 ");
    return  play.mvc.Results.ok("Success " + msg1);
}
catch(Exception e)
{
    return (play.mvc.Results.ok("Exception"));
}

}
公共结果调用(字符串消息){
试一试{
System.out.println(“调用”);
MySampleMessage msg=新的MySampleMessage(消息);
System.out.println(msg.getMessage());
Future futr=(Future)Patterns.ask(myActor,msg,localConfig.getTimeOut());
System.out.println(“调用1”);
////Promise Promise=Promise.wrap(futfure);
字符串msg1=Await.result(futr,Duration.create(10,TimeUnit.ms));
System.out.println(“调用2”);
返回play.mvc.Results.ok(“成功”+msg1);
}
捕获(例外e)
{
返回(play.mvc.Results.ok(“异常”));
}
}

是否有其他方法可以解析来自
async
参与者的响应

必须小心标准java类型和Akka类型之间的名称冲突。例如,Java有一个
Java.util.concurrent.Future
类型,而Akka的
Patterns.ask()
返回一个
Akka.dispatch.Future


检查您对
未来的演员阵容
。它在运行时永远不会工作,类型不兼容稍后会被检测到,因为Java的未来与Akka的
waitiable

无关,我找到了一种方法来解析参与者的响应。创建一个函数,包装您的未来并将其映射到一个函数,该函数将检查响应的实例类型并返回结果。下面是工作代码片段

Future<Object> futre = (Future<Object>) Patterns.ask(myActor, msg,      localConfig.getTimeOut());

F.Function<Object, Result> function = new F.Function<Object, Result>()
{
    public Result apply(Object response)
    {
        String s = String.valueOf(response);
        if(response instanceof String) return play.mvc.Results.ok(s);
        else  return play.mvc.Results.ok("fail");
    }
};

return Promise.wrap(futre).map(function);
Future futre=(Future)Patterns.ask(myActor,msg,localConfig.getTimeOut());
F.函数=新的F.函数()
{
公共结果应用(对象响应)
{
字符串s=字符串.valueOf(响应);
if(字符串的响应实例)返回play.mvc.Results.ok(s);
否则返回play.mvc.Results.ok(“失败”);
}
};
返回Promise.wrap(futre).map(函数);

您遇到的编译器异常具体是什么?因为如果是“类型不匹配”,只需将
Await.result
值转换为字符串
String msg1=(String)Await.result(…)
。我得到了一个类似-expected Awaitable的错误,但在Await.result中的aruement{1}处发现了scala.concurrent.Future