This question already has answers here:
How do I fix a NoSuchMethodError?

(28个答案)


4年前关闭。




public enum CardinalDirection {
    NORTH (90),
    EAST (0),
    SOUTH (270),
    WEST (180);

    private float angle;

    CardinalDirection(float angle) {
        this.angle = angle;
    }

    public float angle() {
        return angle;
    }

    public CardinalDirection opposite() {
        switch (this) {
        case EAST: return WEST;
        case NORTH: return SOUTH;
        case SOUTH: return NORTH;
        case WEST: return EAST;
        default: return null;
        }
    }
}


您好,我很早以前就创建了这个枚举。
枚举在派生代码中使用,这意味着,每次导出时,另一个项目中都包含此确切的代码。

但是最近,在导出整个项目之后,方法“ angle()”引发了NoSuchMethodError:... angle()F

首先,方法末尾的F是什么意思?
第二,100%确定性的最新代码怎么可能引发此错误?

Caused by: java.lang.NoSuchMethodError: org.thearaxgroup.surf.enums.CardinalDirection.angle()F
        at org.thearaxgroup.act.object.ActionBoxDisplayManager.newArmorStand(ActionBoxDisplayManager.java:65) ~[?:?]
        at org.thearaxgroup.act.object.ActionBoxDisplayManager.getArmorStand(ActionBoxDisplayManager.java:80) ~[?:?]
        at org.thearaxgroup.act.object.ActionBoxDisplayManager.reloadArmorStand(ActionBoxDisplayManager.java:30) ~[?:?]
        at org.thearaxgroup.act.command.CommandActBox.onCommand(CommandActBox.java:171) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.9.jar:git-Spigot-bc01c3a-55b0def]
        ... 15 more


编辑:我确实找出了导致问题的原因……或多或少。
另一个.jar(插件)也使用受影响项目中的代码。
但是,它仅取决于它,不会以任何方式重新定义它。我检查了很多可能的原因,但找不到任何原因。

似乎jar的唯一存在是导致该错误。

最佳答案

这是运行时错误。引发异常的代码是针对包含该方法的代码版本进行编译的,但是部署代码的可用版本没有该方法。

换句话说,可用于编译器或IDE的库与部署位置的库之间存在版本不匹配的情况。

关于java - fork 代码中的Java NoSuchMethodError ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36116147/

10-09 06:03
查看更多