Подтвердить что ты не робот

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

4b9b3361

Ответ 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" < --- не делать этого