2011-07-15 58 views
18

堆棧幀的地圖我也跟着教程介紹了遊戲的框架,但它給了我一個錯誤:

Execution exception VerifyError occured : Expecting a stack map frame in method controllers.Secure$Security.authentify(Ljava/lang/String;Ljava/lang/String;)Z at offset 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其重新啓動遊戲後框架正確加載。我將安全模型添加到我的路線中。 Eclipse沒有提供任何錯誤;錯誤只發生在執行時間。 Secure.Security類實際上具有public static isConnected方法。我正在使用Play框架的最新版本(1.2.2)。

+0

我可以看到在播放源代碼中認證是@Deprecated,但不知道它在哪裏被調用,如果這是導致異常? –

+1

freeone3000 @ irc.freenode.org#java提示它可能與我使用JDK 1.7的事實有關;字節碼和驗證。它可能與'invokedynamic'有關嗎? –

回答

20

Play的消息組討論了JDK1.7存在一些問題,並且Play尚未正式支持此功能。如果可能,請嘗試使用JDK 6,並查看是否仍然出現此錯誤。

如果你被限制在JDK7,您可以使用您application.conf文件的選項

java.source=1.6 

2011年8月18日更新: Nicolas Leroux最近在Twitter上發佈了一條消息,表示Java 7支持已被添加到主分支中的Play中。它可能不會使1.2.3發佈,但會在那之後發佈。

+1

Play 1.2.4 RC3支持Java 7 - https://groups.google.com/forum/#!topic/play-framework/t2TQl3neUBI – ripper234

+1

確實如此。它確實錯過了1.2.3,但是因爲它在master中,所以它自動添加到1.2.4。 – Codemwnci

+1

與1.7支持公告相反,這似乎是這種情況。這不僅爲我解決了這個問題,但是我看到了一個類似的問題,試圖使用SecureSocial插件,並且也看到了一些關於1.7的問題(儘管我沒有嘗試在那個時候修復它,所以我對那裏的結果不積極)。但是我可以證明我使用的是Play 1.2.4,並且看到了這個相同的錯誤,並且這個錯誤修復了它。 – Bane

15

我有同樣的問題,它似乎確實來自JDK7。

我解決這個問題,添加

java.source=1.6 

到application.conf文件,停止應用程序,該應用程序的tmp目錄下刪除一切,然後重新啓動它,它應該工作,即使你有JDK 1.7安裝

如果不刪除這些文件,播放不會重新編譯他們,這是行不通的,即使你回去JDK 1.6

+2

+1清理/ tmp – ripper234

8

,你也可以使用-XX:-UseSplitVerifier標誌。

+0

這個工程在java 1.7; java 1.8你應該追加-noverify到vm選項 – Marks

4

當我運行我的遊戲應用程序時,我遇到了同樣的問題。 我使用發揮1.2.5和Java 1.7

我只是在application.conf添加

java.source=1.6

然後刪除tmp文件夾並重新啓動應用程序,它工作。

-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「< ---不這樣做
+0

報告的問題實際上與生成的字節碼不完全符合java 7預期的內容有關,而與你選擇執行應用程序的java二進制文件不完全兼容 –