Tôi đang cố gắng sử dụng các phản xạ để tải một thể hiện của một lớp. Tôi nhận được một ngoại lệ như vậy khi tôi thử và làm điều đó. Tôi đã kiểm tra và kiểm tra và kiểm tra lại. Nhà xây dựng đó rõ ràng không tồn tại. Có ai có ý tưởng nào? Tôi đã sử dụng thành công điều này trước khi vào một dự án khác với mã cơ bản giống nhau vì vậy tôi không chắc chắn nơi tôi hơi say lên. Nguồn có thể được tìm thấy ở đây:Java NoSuchMethodException khi nhận được hàm tạo
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;
}
Full Nguồn: https://github.com/zachoooo/ItemSave
Và đây là Stack Trace:
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)
ý tưởng Chỉ cần hoang dã, nhưng có lẽ thử 'getDeclaredConstructor' thay vì 'getConstructor' trong trường hợp nhà xây dựng không được công khai. Ngoài ra, bạn không nên liên kết mã nguồn nhưng thêm nó vào câu hỏi. – Pshemo
Nó chắc chắn là công khai, và tôi không muốn phải bao gồm nguồn cho một vài tập tin trên trang, mà sẽ làm cho câu hỏi của tôi khá dài. Tôi có nên làm điều đó không? –
Không, bạn nên cắt nó xuống một chương trình đầy đủ chỉ chứa một vài dòng mã để tái tạo vấn đề. – Dukeling