java offset函数的使用方法_java – 构造函数必须在方法返回之前调用super()或this()...

我收到此错误:

Exception in thread "Thread-0" java.lang.VerifyError: Constructor must call super() or this() before return in method JGame.Util.KeyboardMap.()V at offset 0

at JGame.Room.Room.keyboardEventTests(Room.java:81)

at JGame.Room.Room.run(Room.java:54)

at java.lang.Thread.run(Thread.java:722)

当我的应用程序加载时,它立即调用此方法(KeyboardMap.map是一个空的HashMap).

这是方法(第54行调用此方法this.keyboardEventTests();):

protected void keyboardEventTests(){

for(Map.Entry ap : KeyboardMap.map.entrySet()){ // Line 81

Mapping mp = (Mapping)ap.getValue();

if(mp.doing){

mp.run();

}

}

}

这是KeyboardMap类.

package JGame.Util;

import java.util.HashMap;

import java.util.Map;

public class KeyboardMap{

public static Map map = new HashMap<>();

public static void set(String key, Boolean value, Runnable run){

Mapping mp = new Mapping();

mp.doing = value;

mp.run = run;

KeyboardMap.map.put(key, mp);

}

public static Mapping get(String key){

return KeyboardMap.map.get(key);

}

}

为什么我会收到这个错误,我怎么能摆脱它呢?

解决方法:

Why am I getting that error, and how can I get rid of it?

最大的线索是,这是一个VerifyError,而不是编译错误.这意味着JVM找到了一个字节码文件,其中一个构造函数没有正确链接.这些(实际上)是格式错误的字节码.

怎么会发生这种情况?

>它不会发生在以正常方式(仅)编译的Java类中.编译器将自动将隐式super()调用插入到未明确链接的任何构造函数中.

>如果这是Java代码,则:

>该类是使用损坏的编译器编译的(不太可能!),或

>有些东西在编译后调整了字节码.

>如果是其他语言,那么第一个嫌疑人将是“字节码的其他语言”编译过程.

我认为你遇到了这个问题,因为你的单元测试使用了一个模拟框架,而模拟框架正在使用“字节代码工程”将一些内容注入到被测试的类中.执行此操作的代码“出错了”,结果是无法编译的字节码.

这显然是通过重建来解决的,但这与此解释并不矛盾.重建可以清除由模拟框架注入的破坏的检测代码.下一次,框架可以“正确”.

标签:java

来源: https://codeday.me/bug/20190723/1508891.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值