当前位置: 首页 > 知识库问答 >
问题:

VerifyError:stackmap帧不一致

宰父阳焱
2023-03-14

我得到了一个错误,我完全不知道如何去修复它。环顾stackoverflow,这个错误似乎与损坏的文件或在不兼容的Java版本中编译的类有关。这是我一直在研究的问题之一:获得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重新编译它。

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;
    }

共有1个答案

孟选
2023-03-14

问题出在为createStringHashmap方法生成的代码中,如果您使用eclipse编译代码,这可能是eclipse编译器中的一个bug,因为它生成了错误的字节代码。看看您是否能够识别出导致问题的代码的哪一部分,并用Eclipse记录一个bug。我还建议您尝试一个新版本的eclipse,您还没有使用过。

 类似资料:
  • 我试图通过相机的PreviewCall back(onPreviewFrame)使用MediaCodec对每秒30帧的视频进行编码。我编码的视频总是播放得很快(这是不希望的)。所以,我试图通过设置一个int frameCount变量来检查进入相机预览的帧数以记住它的计数。我期望的是每秒30帧,因为我将相机的预览设置为30 fps预览(如下所示)。我得到的结果是不一样的。我调用了onPreviewF

  • 我想让应用程序逐帧播放功能。我想这是不可能与标准的Android工具。我尝试了VideoView和search kTo(当前的1000/帧率)方法,但它不起作用(我想它不会在暂停的视频上寻找)。我的问题是:我需要学习和使用什么来使它成为可能,什么工具和/或库?我是Android初学者,我没有工作的视频渲染早,所以我的知识,这是真的很低。

  • 我最近将我的项目从1.7升级到了Java1.8。 我在我的一个类中得到一个不一致的stackmap的异常。 原因:top类型(当前帧,locals[4])不能分配给“java/lang/stringbuffer”(堆栈映射,locals[4]) 当前帧:BCI:@98标志:{}局部:{“some class/setdata”,“some class/data”,“some class/data”,

  • 我有两个不同列数和行数的CSV文件。第一个CSV文件有M列和N行,第二个文件有H列和G行。一些列具有相同的名称。 null 另外,如果两个CSV文件有两个数据帧,并希望这样做,例如,如果我将第一个CSV加载到中,将第二个加载到中,然后希望合并到,类似于上面的示例。

  • 我正在尝试做一个简单的Java字节码混淆器,它通过用简单的条件跳转替换指令来工作,例如,。我当前的代码是: 其中是混淆方法的参数,类型为,类实现接口。 这很好,但不是所有的方法都可以使用(我对字节码很陌生,所以不知道具体的情况)。例如,它可以很好地用于主方法: 原始Java代码(在Procyon中反编译):https://p.reflex.rip/DLMT.cs 原始字节码:https://p.r

  • 问题内容: 我正在创建一个单页应用程序,后端使用Golang,前端使用javascript。我想找到一种方法,以使用Golang获取视频的第一帧。 首先,我将一个.mp4视频文件上传到服务器。它保存在服务器上。 有没有一种方法可以使用Golang获取此视频的第一帧?应该可以在前端使用Javascript来做到这一点,但我认为这不是解决此问题的正确方法。 我不知道如何使用Golang来实现它,也没有