我今天早上升级到了Play 1.2.1,所以我可以利用他们的新功能来编写HTTP功能。
当我使用下面的例子时,来自Play文档(*我是 使用不同的方法名称*),我收到一个UnexpectedException 错误。
public static void loopWithoutBlocking() {
for(int i=0; i<=10; i++) {
Logger.info(i);
await("1s");
}
renderText("Loop finished");
}
错误如下:
Oops: UnexpectedException
An unexpected error occured caused by exception UnexpectedException:
While applying class play.classloading.enhancers.ContinuationEnhancer
on controllers.Application
上面的示例方法放在Application控制器中,我已经包含了play.libs.F库。
使用await()调用的方法是否需要嵌套在更深层次的内容中?
答案 0 :(得分:2)
以防任何人遇到同样的问题(似乎其他人也有报道)我认为我最好总结一下我是如何解决这个问题的(虽然它可能不被视为'答案'):
正如@Codemwnci和Julien Tournay @ Play-framework google group所指出的那样。问题中包含的代码实际上已经运行。
错误的实际原因是Application类中的一些“无关”代码似乎与await()调用冲突。找到有问题的方法后,我整理了代码,导致错误自行解决 - 但我无法确定问题的实际原因(相信我,我确实看过了)。
那么,你问的答案是什么?
它不是await()方法,它是你代码中的其他东西......所以注释除了包含await()调用的方法之外的所有内容并找到打破它的代码。
尽情发现!
答案 1 :(得分:1)
似乎很多关于等待的错误已经在1.2.4版本之后修复(当前我正在写这个答案的时候)。
许多问题仍然没有解决,我遇到了同样的问题。
但是有一个备用回购,位于:https://github.com/mbknor/play/tree/1.2.4-mbknor-custom-release
包含1.2.4版本的Play以及一些关键更新/修复,包括等待的那些。
我试过了,对于我的问题,它现在已经解决了。
也许它适合你。
现在,如果您在阅读这些专线时发布了Play 1.2.5,那对您来说应该不是问题。
答案 2 :(得分:1)
我今天偶然发现了这个问题,我注意到它实际上是由一个方法的长度引起的。是的,这是正确的,在导致问题的同一个类中有一个太长方法,在将其中一部分提取为另一个方法后,问题就消失了!因此,请务必检查您的代码。