我按照教程介绍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 回答
Play的消息组已经讨论过JDK1.7存在一些问题,Play尚未正式支持这一点 . 如果可能,请尝试使用JDK 6,看看是否仍然出现此错误 .
如果您仅限于JDK7,则可以使用该选项
在您的application.conf文件中 .
2011年8月18日更新:Nicolas Leroux最近在推特上发了一条消息,称Java 7支持已添加到主分支的Play中 . 它可能不会发布1.2.3版本,但会在此之后发布 .
我有同样的问题,它似乎确实来自JDK7 .
我解决它,添加
到application.conf文件,停止应用程序,删除应用程序的tmp目录下的所有内容并重新启动它,即使安装了JDK 1.7也应该可以正常工作
如果你不删除文件,播放将不会重新编译它们,它将无法工作,即使你回到JDK 1.6
你也可以使用
-XX:-UseSplitVerifier
标志 .我运行我的播放应用程序时遇到了同样的问题 . 我正在使用play 1.2.5和Java 1.7
我刚才补充道
在application.conf中 .
然后删除tmp文件夹并重新启动应用程序,它工作正常 .
如果你想使用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" <---不要这样做