2017-07-18 44 views
0

我目前正在寫一個私人的Java API爲自己使用Class的允許API的某些部分(統計數據保留部分),而不改變底層的使用可以延長。我喜歡這個方法,但由於某些原因,每當API試圖執行theClass.newInstance(),它引發錯誤像這樣:的Java的newInstance拋出錯誤,它應該不

java.lang.IllegalAccessError: tried to access method me.duper51.DuperFramework.utils.player.StatsObject.<init>()V from class me.duper51.Skyrings.stats.SkyringsStats 
    at me.duper51.Skyrings.stats.SkyringsStats.<init>(SkyringsStats.java:14) ~[?:?] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_131] 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_131] 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_131] 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_131] 
    at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_131] 
    at me.duper51.DuperFramework.utils.player.PlaygroundPlayer.getStats(PlaygroundPlayer.java:71) ~[?:?] 
    at me.duper51.Skyrings.listeners.GameListener.lambda$getReplacements$0(GameListener.java:65) ~[?:?] 
    at me.duper51.DuperFramework.utils.scoreboard.SidebarOption.update(SidebarOption.java:44) ~[?:?] 
    at me.duper51.DuperFramework.utils.scoreboard.SidebarOption.update(SidebarOption.java:53) ~[?:?] 
    at me.duper51.DuperFramework.utils.scoreboard.SidebarManager.updateAll(SidebarManager.java:75) ~[?:?] 
    at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot.jar:git-Spigot-21fe707-e1ebe52] 
    at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot.jar:git-Spigot-21fe707-e1ebe52] 
    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [spigot.jar:git-Spigot-21fe707-e1ebe52] 
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot.jar:git-Spigot-21fe707-e1ebe52] 
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot.jar:git-Spigot-21fe707-e1ebe52] 
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot.jar:git-Spigot-21fe707-e1ebe52] 
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131] 

me.duper51.Skyrings.stats.SkyringsStats哪裏是擴展的類,和me.duper51.DuperFramework.utils.player.StatsObject是基類。

擴展的對象看起來像下面這樣:

public class SkyringsStats extends StatsObject { 
public SkyringsStats() { 
    super(); 
} 

private int kills = 0; 
private int wins = 0; 
private int totalPlays = 0; 
private int deaths = 0; 
public void incrementKills() { 
    kills++; 
} 
public void incrementDeaths() { 
    deaths++; 
} 
public void incrementTotalPlays() { 
    totalPlays++; 
} 
public void incrementWins() { 
    wins++; 
} 

public int getKills() { 
    return kills; 
} 

public int getWins() { 
    return kills; 
} 

public int getDeaths() { 
    return kills; 
} 

public int getGamesPlayed() { 
    return kills; 
} 

} 

作爲另一個答案的要求,這是javap -p me.duper51.DuperFramework.utils.player.StatsObject

Compiled from "StatsObject.java" 
public class me.duper51.DuperFramework.utils.player.StatsObject { 
    private java.util.UUID pUUID; 
    public me.duper51.DuperFramework.utils.player.StatsObject(); 
    void setpUUID(java.util.UUID); 
    public void commitChanges(me.duper51.DuperFramework.GamePlugin); 
    private static void lambda$commitChanges$0(); 
} 

回答

0

就我而言,我是用詹金斯作爲構建這個應用程序的方法。 JAR然後被加載到另一個應用程序中。 DuperAPI包有多個版本,並且要加載的第一個JAR具有優勢。這導致了差異並最終導致了錯誤。我調整了陰影系統,不包含上游API不需要的文件。

1

StatsObject默認構造函數是私有的或不可訪問的輸出,並且自從編譯此代碼以來一定是這樣做的。

+0

我只是反編譯,這是在使用的JAR文件。 StatsObject的默認構造函數按預期公開。 – duper51

+0

可以運行'的javap -p me.duper51.DuperFramework.utils.player.StatsObject'用適當的類路徑,並顯示在你的答案的方法簽名? – EJP

+0

'從 「StatsObject.java」 公共類me.duper51.DuperFramework.utils.player.StatsObject { 私人java.util.UUID中pUUID編制; public me.duper51.DuperFramework.utils.player.StatsObject(); void setpUUID(java.util.UUID); public void commitChanges(me.duper51.DuperFramework.GamePlugin); private static void lambda $ commitChanges $ 0(); } ' – duper51

相關問題