2016-01-15 101 views
1

我收到一個錯誤,我完全不知道如何去修復它。看看周圍的stackoverflow似乎這個錯誤是與損壞的文件或在不兼容的Java版本中編譯的類有關。這是我一直在尋找到的一個問題:Causes of getting a java.lang.VerifyErrorjava.lang.VerifyError:不一致的堆棧映射幀

WARNING: Error for /clearnlp 
java.lang.VerifyError: Inconsistent stackmap frames at branch target 60 
Exception Details: 
    Location: 
    edu/emory/clir/clearnlp/util/DSUtils.createStringHashMap(Ljava/io/InputStream;Ledu/emory/clir/clearnlp/util/CharTokenizer;Z)Ljava/util/Map; @60: aload_1 
    Reason: 
    Type top (current frame, locals[5]) is not assignable to 'java/lang/String' (stack map, locals[5]) 
    Current Frame: 
    bci: @39 
    flags: { } 
    locals: { 'java/io/InputStream', 'edu/emory/clir/clearnlp/util/CharTokenizer', integer, 'java/io/BufferedReader', 'java/util/Map', top, 'java/lang/String' } 
    stack: { integer } 
    Stackmap Frame: 
    bci: @60 
    flags: { } 
    locals: { 'java/io/InputStream', 'edu/emory/clir/clearnlp/util/CharTokenizer', integer, 'java/io/BufferedReader', 'java/util/Map', 'java/lang/String' } 
    stack: { } 
    Bytecode: 
    0x0000000: bb00 5159 bb00 6f59 2ab7 0074 b700 774e 
    0x0000010: bb00 8a59 0312 8c12 0b12 0db8 0013 b700 
    0x0000020: 8d3a 04a7 0045 1c99 0015 1905 b600 323a 
    0x0000030: 0519 05b6 0036 9900 06a7 002f 2b19 0503 
    0x0000040: 1295 120b 120d b800 13b6 0099 3a06 1904 
    0x0000050: 1906 0332 1906 0432 0312 9b12 0b12 0db8 
    0x0000060: 0013 b900 9f03 0057 2db6 005c 593a 05c7 
    0x0000070: ffb7 a700 0a3a 0719 07b6 0061 1904 b0 
    Exception Handler Table: 
    bci [35, 114] => handler: 117 
    Stackmap Table: 
    full_frame(@38,{Object[#143],Object[#145],Integer,Object[#81],Object[#147],Top,Object[#40]},{}) 
    full_frame(@60,{Object[#143],Object[#145],Integer,Object[#81],Object[#147],Object[#40]},{}) 
    chop_frame(@104,1) 
    same_locals_1_stack_item_frame(@117,Object[#71]) 
    same_frame(@124) 

    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70) 
    at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65) 
    at edu.emory.clir.clearnlp.coreference.sieve.SpeakerIdentification.<init>(SpeakerIdentification.java:24) 
    at edu.emory.clir.clearnlp.coreference.config.SieveSystemCongiuration.loadDefaultSieves(SieveSystemCongiuration.java:63) 
    at edu.drexel.gameailab.ClearNLPServlet.doGet(ClearNLPServlet.java:66) 
    at edu.drexel.gameailab.ClearNLPServlet.doPost(ClearNLPServlet.java:44) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 

爲了關閉此類型的錯誤,我已經清理項目好幾次,刪除每一個.class文件,我發現。將所有依賴關係(JAR)更新爲最新版本,對於更晦澀的JAR,我找不到新版本,因爲我跟蹤了源代碼,並將其沿着我的源代碼進行了轉儲,以確保它被JVM重新編譯。

關於設置,這是使用servlet(Jetty)和Google App Engine的clearnlp解析器項目的Web界面。我知道GAE有一些限制,我已經重寫了文件訪問部分,這很麻煩。我已經用stanford corenlp完成了相同的過程,並且一旦改寫就沒有問題。

at edu.emory.clir.clearnlp.coreference.sieve.SpeakerIdentification.<init>(SpeakerIdentification.java:24)正在初始化一些集合:private final Set<String> firstPersonSingularPronouns = DSUtils.toHashSet("i", "me", "my", "mine");及以下有來自DSUtils.java一些源代碼:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.lang.reflect.Field; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collection; 
import java.util.Collections; 
import java.util.HashMap; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Map; 
import java.util.PriorityQueue; 
import java.util.Random; 
import java.util.Set; 
import java.util.regex.Pattern; 

import edu.emory.clir.clearnlp.collection.list.FloatArrayList; 
import edu.emory.clir.clearnlp.collection.pair.DoubleIntPair; 
import edu.emory.clir.clearnlp.collection.pair.Pair; 

public class DSUtils 
{ 
[...] 

    @SuppressWarnings("unchecked") 
    static public <T>Set<T> toHashSet(T... items) 
    { 
     Set<T> set = new HashSet<T>(items.length); 
     for (T item : items) set.add(item); 
     return set; 
    } 

任何人有什麼我應該在下次找任何指針? GAE是否會破壞類文件?我怎麼修復它?我沒有源代碼 com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:65),那些屬於GAE SDK,我目前在Release:1.9.30。 不確定是否相關,但我在使用Apple的jdk1.8.0_60的OSX 10.11.2上。

回答

1

問題在於爲createStringHashmap方法生成的代碼中,如果您使用eclipse編譯代碼,這可能是eclipse編譯器中的一個錯誤,因爲它會生成錯誤的字節碼。看看你是否可以識別哪部分代碼導致了問題,並用eclipse提交錯誤。我也建議你嘗試一個更新的eclipse版本,你已經不在其中。

+0

所以,在Eclipse 4.4中存在一些問題。當我在命令行中編譯'DSUtils.java'並複製到classes目錄時,一切正常。謝謝。 –

0

1.8方法如下:

  1. 窗口 - >首選項 - >安裝了JRE。
  2. 選擇jdk/jre並選擇編輯。
  3. 在默認VM參數中,給出「-noverify」。對於1.7,給出「-XX: - UseSplitVerifier」