2017-07-18 9 views
0

私は現在、プライベートJava APIを自分自身で作成しています。Classは、APIの特定の部分(統計保持部分)を基礎となる使用方法を変更することなく拡張できるようにしています。私はこの方法を好むが、APIはtheClass.newInstance()を実行しようとするたびに、いくつかの理由のために、それはそうのようなエラーをスロー:me.duper51.Skyrings.stats.SkyringsStats拡張クラスであり、me.duper51.DuperFramework.utils.player.StatsObjectはベースクラスである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] 

。 、

別の答えに要求されたよう
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

私の場合、このアプリケーションを構築する方法としてJenkinsを使用していました。その後、JARは別のアプリケーションにロードされました。 DuperAPIパッケージには複数のバージョンがあり、ロードされる最初のJARが優位を得ました。これにより不一致が発生し、最終的にエラーが発生しました。私は、上流のAPIから必要とされなかったファイルを含まないようにシェーディングシステムを調整しました。

1

StatsObjectのデフォルトコンストラクタがprivateまたはアクセス不能での出力は次のとおりです。

拡張オブジェクトは、次のようになりますこのコードがコンパイルされて以来、作成されていなければなりません。

+0

私は使用中のJARファイルを逆コンパイルしました。 StatsObjectの既定のコンストラクターは、期待どおりパブリックです。 – duper51

+0

'javap -p me.duper51.DuperFramework.utils.player.StatsObject'を適切なクラスパスで実行して、回答にメソッドの署名を表示できますか? – EJP

+0

'" 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); プライベート静的void lambda $ commitChanges $ 0(); } 「 – duper51

関連する問題