클래스의 인스턴스를로드하는 데 반사를 사용하려고합니다. 내가 시도 할 때 예외 메소드가 없다. 나는 체크하고 체크하고 다시 체크했다. 그 생성자는 분명히 존재합니다. 누구든지 아이디어가 있습니까? 본질적으로 동일한 코드를 가진 다른 프로젝트에서이 코드를 성공적으로 사용 했으므로 어디에서 실수를했는지 확신 할 수 없습니다.생성자를 가져올 때 Java NoSuchMethodException
private void loadCommands() {
try {
for (Class<?> clazz : ReflectionsReplacement.getSubtypesOf(BaseCommand.class, "us.zsugano.itemsave.commands", plugin.getClass().getClassLoader(), BaseCommand.class)) {
BaseCommand baseCommand = null;
try {
baseCommand = (BaseCommand) clazz.getConstructor(ItemSave.class).newInstance(plugin);
if(Listener.class.isAssignableFrom(clazz)) {
plugin.getServer().getPluginManager().registerEvents((Listener) baseCommand, plugin);
}
} catch (Exception e) {
plugin.PluginPM.sendMessage(Level.SEVERE, "Issues encountered when trying to load commands.");
e.printStackTrace();
}
commands.add(baseCommand);
}
} catch (Exception e) {
plugin.PluginPM.sendMessage(Level.SEVERE, "Exception caught while loading commands.");
e.printStackTrace();
}
for (BaseCommand command : commands) {
plugin.getCommand(command.getName().toLowerCase()).setExecutor(this);
}
}
public abstract class BaseCommand {
public ItemSave plugin;
public BaseCommand(ItemSave plugin) {
this.plugin = plugin;
}
전체 소스 : https://github.com/zachoooo/ItemSave
을 그리고 여기에 스택 추적입니다 : 소스는 여기에서 찾을 수 있습니다
내가이 패키지 개인 생성자를 참조 StoreCommand.java에서19:43:10 [SEVERE] [ItemSave] Issues encountered when trying to load commands.
19:43:10 [SEVERE] java.lang.NoSuchMethodException: us.zsugano.itemsave.commands.
StoreCommand.<init>(us.zsugano.itemsave.ItemSave)
19:43:10 [SEVERE] at java.lang.Class.getConstructor0(Unknown Source)
19:43:10 [SEVERE] at java.lang.Class.getConstructor(Unknown Source)
19:43:10 [SEVERE] at us.zsugano.itemsave.commands.CommandManager.loadComma
nds(CommandManager.java:32)
19:43:10 [SEVERE] at us.zsugano.itemsave.commands.CommandManager.<init>(Co
mmandManager.java:23)
19:43:10 [SEVERE] at us.zsugano.itemsave.ItemSave.onEnable(ItemSave.java:1
9)
19:43:10 [SEVERE] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlug
in.java:217)
19:43:10 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(
JavaPluginLoader.java:457)
19:43:10 [SEVERE] at org.bukkit.plugin.SimplePluginManager.enablePlugin(Si
mplePluginManager.java:381)
19:43:10 [SEVERE] at org.bukkit.craftbukkit.v1_6_R2.CraftServer.loadPlugin
(CraftServer.java:282)
19:43:10 [SEVERE] at org.bukkit.craftbukkit.v1_6_R2.CraftServer.enablePlug
ins(CraftServer.java:264)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.l(Minecr
aftServer.java:313)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.f(Minecr
aftServer.java:290)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.a(Minecr
aftServer.java:250)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.DedicatedServer.init(Ded
icatedServer.java:151)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.MinecraftServer.run(Mine
craftServer.java:391)
19:43:10 [SEVERE] at net.minecraft.server.v1_6_R2.ThreadServerApplication.
run(SourceFile:582)
그냥 야생 생각을 설정 한 다음,하지만 어쩌면하려고 하나'의 경우 생성자 대신 getConstructor''의 getDeclaredConstructor' 공개하지 않습니다. 또한 소스 코드를 링크하지 말고 질문에 추가하십시오. – Pshemo
그것은 분명히 공개적이며 페이지에 몇 개의 파일에 대한 소스를 포함하고 싶지 않았기 때문에 오히려 오랜 시간 내 질문에 답할 수있었습니다. 어쨌든해야합니까? –
아니요, 문제를 재현하는 몇 줄의 코드 만 포함 된 전체 프로그램으로 줄이십시오. – Dukeling