VerifyError;Ожидается фрейм карты стека в методе controllers.Secure $ Security.authentify - PullRequest
18 голосов
/ 15 июля 2011

Я следовал обучающей программе, знакомящей с платформой 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. Я добавил безопасную модель в мои маршруты. Затмение не дает ошибок; ошибка возникает только во время выполнения. Класс Secure.Security действительно имеет открытый статический метод isConnected. Я использую самую последнюю версию для платформы Play (1.2.2).

Ответы [ 5 ]

20 голосов
/ 15 июля 2011

Группа сообщений для Play обсуждала, что есть некоторые проблемы с JDK1.7, и что Play пока официально не поддерживает это. Если возможно, пожалуйста, попробуйте с JDK 6, и посмотрите, если вы все еще получаете эту ошибку.

Если вы ограничены JDK7, вы можете использовать опцию

java.source=1.6

в вашем файле application.conf.

Обновление от 18 августа 2011 года: Николя Леру недавно отправил в Twitter сообщение о том, что в ветку master добавлена ​​поддержка Java 7 в Play. Вероятно, он не сделает релиз 1.2.3, но сделает его после этого.

15 голосов
/ 07 августа 2011

У меня была такая же проблема, похоже, она действительно из JDK7.

I, чтобы решить ее, добавьте

java.source=1.6

в файл application.conf, остановите приложение, удалите все в каталоге tmp приложения и перезапустите его, оно должно работать, даже еслиу вас установлен JDK 1.7

, если вы не удаляете файлы, воспроизведение не перекомпилирует их и не будет работать, даже если вы вернетесь к JDK 1.6

8 голосов
/ 14 ноября 2011

Вы также можете использовать флаг -XX:-UseSplitVerifier.

4 голосов
/ 20 октября 2012

У меня была та же проблема, когда я запускал свое игровое приложение.Я использую play 1.2.5 и Java 1.7

Я только что добавил

java.source = 1.6

в application.conf

Затем удалил папку tmp и перезапустил приложение, и оно заработало.

0 голосов
/ 18 января 2013

Ничего страшного, если вы хотите использовать jdk7. Просто убедитесь, что ваш путь Java настроен правильно. Проверьте "java -version" и "javac -version".

Пример пути:

  • "C: \ Program Files \ Java \ jdk1.7.0_07 \ bin" <--- сделайте это </li>
  • "C: \ Program Files \ Java \ jdk1.7.0_07 \ jre \ bin" <--- не делать это </li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...