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

时间:2011-07-15 08:06:04

标签: 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);
        }
    }

    ...

对于安全类:

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 个答案:

答案 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

我刚刚添加了

  

java.source = 1.6

在application.conf中的

然后删除了tmp文件夹并重新启动应用程序并运行。

答案 4 :(得分:-1)

如果你想使用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" < ---不要这样做