的VerifyError; 期望方法控制器中的堆栈映射框.安全$ Security.authentify

Rob*_*e W 18 playframework

我按照教程介绍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);
        }
    }

    ...
Run Code Online (Sandbox Code Playgroud)

对于Security类:

package controllers;

import models.*;

public class Security extends Secure.Security {    
    static boolean authenticate(String username, String password) {
        return User.connect(username, password) != null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我还将安全模块添加到dependencies.yml,它在重新启动Play框架后正确加载.我将安全模型添加到了我的路线中.Eclipse没有错误; 错误仅在执行时发生.Secure.Security类确实具有可用的公共静态isConnected方法.我正在使用最新版本的Play框架(1.2.2).

Cod*_*nci 20

Play的消息组已经讨论过JDK1.7存在一些问题,Play尚未正式支持这一点.如果可能,请尝试使用JDK 6,看看是否仍然出现此错误.

如果您仅限于JDK7,则可以使用该选项

java.source=1.6
Run Code Online (Sandbox Code Playgroud)

在您的application.conf文件中.

2011年8月18日更新: Nicolas Leroux最近在推特上发了一条消息,称Java 7支持已添加到主分支的Play中.它可能不会发布1.2.3版本,但会在此之后发布.

  • 请注意,根据Nicolas的评论,您可以通过在命令行中添加-XX:-UseSplitVerifier标志来在Java 1.7上执行此操作. (2认同)

Fre*_*zaq 15

我有同样的问题,它似乎确实来自JDK7.

我解决它,添加

java.source=1.6
Run Code Online (Sandbox Code Playgroud)

到application.conf文件,停止应用程序,删除应用程序的tmp目录下的所有内容并重新启动它,即使安装了JDK 1.7也应该可以正常工作

如果你不删除文件,播放将不会重新编译它们,它将无法工作,即使你回到JDK 1.6


小智 8

你也可以用 -XX:-UseSplitVerifier旗帜.