【问题标题】:How can I fix this Verify Error?如何解决此验证错误?
【发布时间】:2014-11-11 22:43:34
【问题描述】:

我最近一直在努力寻找我的程序不断显示的致命错误消息的来源:

Exception in thread "main" java.lang.VerifyError: Inconsistent stackmap frames at branch target 65

我已经尝试了很多事情,包括:删除所有类文件并重新构建它们,将整个项目复制到一个新项目中,升级我的 Eclipse 版本(从 Kepler 到 Luna),以及修改代码错误消息给出的行号。没有任何效果,我已经排除了编辑器,因为其他 java 项目运行得很好。如果您能告诉我解决此问题的方法,我将不胜感激。

我的代码可以在here找到。该错误与 Chunk 类有关,但我真的不知道具体是什么。错误信息的堆栈跟踪是:

at ca.ajweeks.igmc2014.level.Level.<init>(Level.java:22)
at ca.ajweeks.igmc2014.state.GameState.init(GameState.java:36)
at ca.ajweeks.igmc2014.state.StateManager.init(StateManager.java:34)
at ca.ajweeks.igmc2014.state.StateManager.<init>(StateManager.java:29)
at ca.ajweeks.igmc2014.Game.<init>(Game.java:38)
at ca.ajweeks.igmc2014.Game.main(Game.java:51)

编辑: 错误的来源似乎是 Chunk 类的 readFile 方法中的一个讨厌的 try-with-resources 语句。我不知道当前版本的 java 中是否存在导致此问题的错误,或者与我的特定程序有关,无论哪种方式使用普通的 try-catch 块都可以解决问题。感谢大家的帮助!

【问题讨论】:

  • 您是否已经阅读过stackoverflow.com/questions/100107/…
  • 它也会让我发疯 :) 你有没有试过在Level 中简化22 行?您正在创建一个由Chunk 对象组成的数组,其中每个Chunk 都使用放在一起的字符串和整数进行初始化,并且全部在一行中!如果我在你的位置,我会先实例化对象,然后创建我的数组,然后将它们放在一起——根据需要在尽可能多的行中。然后,您的异常应该向您显示更具体的查看位置。抱歉,如果我没有发现您的错误..出于兴趣,您为什么使用 "levels/"+String.valueOf(level) 而不是 "levels/"+levels
  • 理论上,如果不以某种方式修改 .class 文件,您不应该能够导致那种特殊的 VerifyError(堆栈映射不一致)。这可能是因为您有某种分析工具正在“按摩” .class 文件,可能内置在 IDE 中。一种奇怪的可能性是,您从失败的类中引用了另一个类的两个不同版本——一个在编译期间引用,另一个在执行时引用。
  • @GameDroids 是的,我尝试过简化/修改该行,但它根本没有帮助。我最初确实有"levels/"+levels,但尝试将其更改为"levels/"+String.valueOf(level) 以试图找到错误。不幸的是,这并没有帮助,但还是谢谢。
  • @HotLicks 我曾一度尝试实现 BugSnag,但我认为我完全删除了它。我之前也实现了 Slick2D,但我也完全删除了它(据我所知)。我的Java Build Path 只有 JRE 系统库,没有其他...

标签: java debugging verifyerror


【解决方案1】:

如果您在此处发布相关代码,将节省大量时间以及指向您的代码的链接。

看看这个帖子Here一个类似的错误及其解决方法,希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2023-02-21
    • 2019-11-14
    • 2017-12-12
    相关资源
    最近更新 更多