2016-03-20 16 views
0
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; 
     } 
    } 
} 

Merhaba, bu enum'u bir süre önce oluşturdum. Enum, çatallı kod içinde kullanılıyor, yani başka bir proje, dışarı aktarıldığında her zaman bu tam kodu içeriyor. Geçenlerde AncakJava NoSuchMethodHata kodu çatallı kodda

, tüm proje, metot "açı()" Bir NoSuchMethodError atıyor dışa aktardıktan sonra: ... yöntemin sonunda F ne açı() F hepsinden

Birincisi, anlamına gelmek? Her şeyden önce, kesinlik ile bugüne kadar% 100 olan kodun bu hatayı nasıl atması mümkündür?

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 

DÜZENLEME: Sorunun nedenini buldum ... daha fazla veya daha az. Başka bir .jar (eklenti), etkilenen projedeki kodu da kullanır. Bununla birlikte, sadece ona bağlı, herhangi bir şekilde yeniden tanımlamaz. Olası sebepleri kontrol ettim ve hiçbir sebep bulamıyorum.

Kavanozun tek varlığı hatanın sebebi gibi görünüyor.

+0

Tam stacktrace ekleyebilir misiniz? – Alexey

cevap

1

Bu bir çalışma zamanı hatası. Kural dışı durumu atar kod, yöntem içeren kodunuzun bir sürümü karşı derlenmiş, ancak kodun dağıtıldığı sürümde bu yönteme sahip değil. Başka bir deyişle, derleyici veya IDE için mevcut kütüphane ile dağıtım konumundaki kütüphane arasında bir sürüm uyuşmazlığı var.