【发布时间】: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