java.lang.VerifyError:不一致的stackmap帧

时间:2016-01-15 22:38:14

标签: java eclipse google-app-engine

我收到错误,我完全不知道如何修复它。查看stackoverflow,似乎此错误与损坏的文件或在不兼容的Java版本中编译的类有关。这是我一直在研究的问题之一:Causes of getting a java.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,我目前处于发行版:1.9.30。 不确定是否相关,但我使用Apple的jdk1.8.0_60在OSX 10.11.2上。

2 个答案:

答案 0 :(得分:1)

问题在于为createStringHashmap方法生成的代码,如果您使用eclipse编译代码,这可能是eclipse编译器中的一个错误,因为它生成了错误的字节代码。看看你是否可以识别代码的哪个部分导致问题,并提交eclipse错误。我还建议你尝试一个更新版的日食,你已经没有了。

答案 1 :(得分:0)

对于1.8,请执行以下操作:

  1. Windows - &gt;偏好 - &gt;已安装JRE。
  2. 选择jdk / jre并选择编辑。
  3. 在默认的VM参数中,输入“-noverify”。对于1.7给“-XX: - UseSplitVerifier“