首页 文章

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

提问于
浏览
18

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

    ...

对于Security类:

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) .

5 回答

  • 8

    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

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

    我解决它,添加

    java.source=1.6
    

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

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

  • 20

    你也可以使用 -XX:-UseSplitVerifier 标志 .

  • 4

    我运行我的播放应用程序时遇到了同样的问题 . 我正在使用play 1.2.5和Java 1.7

    我刚才补充道

    java.source = 1.6

    在application.conf中 .

    然后删除tmp文件夹并重新启动应用程序,它工作正常 .

  • 15

    如果你想使用jdk7,那没关系 . 只需确保正确配置了java路径 . 检查“java -version”和“javac -version” .

    示例路径:

    • "C:\Program Files\Java\jdk1.7.0_07\bin" <---这样做

    • "C:\Program Files\Java\jdk1.7.0_07\jre\bin" <---不要这样做

相关问题