我遵循了介绍Play框架的教程,但它给了我一个错误:
执行例外 发生VerifyError:期望方法控制器中的堆栈映射帧。安全$ Security.authentify(Ljava / lang / String; Ljava / lang / String;)Z偏移量为33
我不确定我做错了什么。我正在使用的代码(片段):
package controllers;
..
@With(Secure.class)
public class Application extends Controller
{
@Before
public static void setConnectedUser()
{
if (Security.isConnected())
{
User user = User.find("byEmail", Security.connected()).first();
user.password = null;
renderArgs.put("user", user);
}
}
...
对于安全类:
package controllers;
import models.*;
public class Security extends Secure.Security {
static boolean authenticate(String username, String password) {
return User.connect(username, password) != null;
}
}
我还将安全模块添加到dependencies.yml,它在重新启动Play框架后正确加载。我将安全模型添加到了我的路线中。 Eclipse没有错误;错误仅在执行时发生。 Secure.Security类确实具有可用的公共静态isConnected方法。我正在使用最新版本的Play框架(1.2.2)。
答案 0 :(得分:20)
Play的消息组已经讨论过JDK1.7存在一些问题,并且Play还没有正式支持。如果可能,请尝试使用JDK 6,看看是否仍然出现此错误。
如果您仅限于JDK7,则可以使用选项
java.source=1.6
在您的application.conf文件中。
2011年8月18日更新: Nicolas Leroux最近在推特上发了一条消息,称Java 7支持已添加到主分支的Play中。它可能不会发布1.2.3版本,但会在此之后发布。
答案 1 :(得分:15)
我有同样的问题,它似乎确实来自JDK7。
我要解决它,添加
java.source=1.6
到application.conf文件,停止应用程序,删除应用程序的tmp目录下的所有内容并重新启动它,即使安装了JDK 1.7也应该可以正常工作
如果你不删除这些文件,那么即使你回到JDK 1.6,它也不会重新编译它们也无法工作
答案 2 :(得分:8)
你也可以使用-XX:-UseSplitVerifier
标志。
答案 3 :(得分:4)
运行我的播放应用程序时遇到了同样的问题。 我正在使用play 1.2.5和Java 1.7
我刚刚添加了
在application.conf中的java.source = 1.6
。
然后删除了tmp文件夹并重新启动应用程序并运行。
答案 4 :(得分:-1)
如果你想使用jdk7,那没关系。 只需确保正确配置了java路径。 检查" java -version"和" javac -version"。
示例路径: