VerifyError; Ожидание кадра карты стека в контроллерах методов. Обеспечьте безопасность $Security.authentify.
Я следил за учебником, представляющим платформу 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).
Ответы
Ответ 1
Группа сообщений для Play обсудила, что есть некоторые проблемы с JDK1.7, и что Play официально не поддерживает это. Если возможно, попробуйте с JDK 6 и посмотрите, не по-прежнему ли вы получите эту ошибку.
Если вы ограничены JDK7, вы можете использовать опцию
java.source=1.6
в файле application.conf.
Обновление 18 августа 2011 года: Nicolas Leroux недавно отправил сообщение в Twitter, чтобы сказать, что поддержка Java 7 была добавлена в игру в главной ветке. Вероятно, он не сделает релиз 1.2.3, но сделает релиз после этого.
Ответ 2
У меня была такая же проблема, она, похоже, исходила от JDK7.
I, чтобы решить эту проблему, добавьте
java.source=1.6
в файл application.conf, остановите приложение, удалите все в каталоге tmp приложения и перезапустите его, он должен работать, даже если у вас установлен JDK 1.7
Если вы не удаляете файлы, воспроизведение не перекомпилит их, и это не сработает, даже если вы вернетесь к JDK 1.6
Ответ 3
вы также можете использовать флаг -XX:-UseSplitVerifier
.
Ответ 4
У меня была такая же проблема, когда я запускал приложение для игры.
Я использую play 1.2.5 и Java 1.7
Я только что добавил
java.source = 1.6
в application.conf.
Затем удалите папку tmp и перезапустите приложение, и оно сработало.
Ответ 5
Это нормально, если вы хотите использовать 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" < --- не делать этого