NoSuchMethod错误,但存在Java方法
我知道这方面还有其他的话题,但他们的解决方案并没有成功地帮助我。 我正在创建一个插件,有一个名为CommandErrors的类,其中只有静态引用和方法。以下是在控制台中打印出来的错误: 控制台错误 严重:空NoSuchMethod错误,但存在Java方法,java,plugins,bukkit,nosuchmethod,Java,Plugins,Bukkit,Nosuchmethod,我知道这方面还有其他的话题,但他们的解决方案并没有成功地帮助我。 我正在创建一个插件,有一个名为CommandErrors的类,其中只有静态引用和方法。以下是在控制台中打印出来的错误: 控制台错误 严重:空 org.bukkit.command.CommandException: Unhandled exception executing command 'capturetheflag' in plugin CaptureTheFlag v1.0<br /> at org.b
org.bukkit.command.CommandException: Unhandled exception executing command 'capturetheflag' in plugin CaptureTheFlag v1.0<br />
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)<br />
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:192)<br />
at org.bukkit.craftbukkit.v1_7_R1.CraftServer.dispatchCommand(CraftServer.java:543)<br />
at net.minecraft.server.v1_7_R1.PlayerConnection.handleCommand(PlayerConnection.java:923)<br />
at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java:803)<br />
at net.minecraft.server.v1_7_R1.PacketPlayInChat.a(PacketPlayInChat.java:28)<br />
at net.minecraft.server.v1_7_R1.PacketPlayInChat.handle(PacketPlayInChat.java:47)<br />
at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146)<br />
at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134)<br />
at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:645)<br />
at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:243)<br />
at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:535)<br />
at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:447)<br />
at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617)<br />
Caused by: java.lang.NoSuchMethodError: <br />net.strikecraft.Commands.CommandErrors.throwError(Lorg/bukkit/command/CommandSender;Lnet/strikecraft/Commands/CTFCommandExecutor;Ljava/lang/String;)Ljava/lang/String;<br />
at net.strikecraft.Commands.CTFCommand.onCommand(CTFCommand.java:28)<br />
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)<br />
... 13 more
如何修复此NoSuchMethod错误?我确信方法和类确实存在。
谢谢 我没有发现问题,而是找到了解决问题的办法。虽然我确信这无疑是更好的编程实践,而且一般来说,用正确的方法解决问题会更好,但我发现创建一个具有不同名称但具有相同主体的类可以解决问题
希望这能帮助别人 重新编译您的类并重建您的项目。@SotiriosDelimanolis我以前尝试过这个方法,但没有解决它。我们需要查看您的
CommandErrors
代码和onCommand
@Tips48刚刚添加的代码。我解决了这个问题,谢谢:)但这个问题非常奇怪。
package net.strikecraft.Commands;
import java.util.ArrayList;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class CTFCommand implements CommandExecutor {
private static ArrayList<CTFCommandExecutor> commands = new ArrayList<CTFCommandExecutor>();
public static CTFCommandExecutor registerCommand(CTFCommandExecutor cmd){
commands.add(cmd);
return cmd;
}
public static ArrayList<CTFCommandExecutor> getCommands(){
return commands;
}
public boolean onCommand(CommandSender sender, Command cmd, String alias, String[] args) {
if(!(sender instanceof Player)){
CommandErrors.throwError(sender, null, CommandErrors.NOT_A_PLAYER);
return true;
}
Player player = (Player)sender;
if(args.length == 0){
CommandErrors.throwError(player, null, CommandErrors.COMMAND_NOT_FOUND);
return true;
}
CTFCommandExecutor ctfCommand = null;
for(CTFCommandExecutor c : commands){
if(c.command().equalsIgnoreCase(args[0]))
ctfCommand = c;
}
if(ctfCommand == null){
CommandErrors.throwError(player, null, CommandErrors.COMMAND_NOT_FOUND);
return true;
}
if(ctfCommand.permission() != null && !player.hasPermission(ctfCommand.permission())){
CommandErrors.throwError(sender, ctfCommand, CommandErrors.NO_PERMISSION);
return true;
}
if(ctfCommand.validArgsCount() != -1 && args.length != ctfCommand.validArgsCount()){
CommandErrors.throwError(sender, ctfCommand, CommandErrors.INCORRECT_USAGE);
return true;
}
String[] ctfCommandArgs = new String[args.length-1];
for(int x=1; x<args.length; x++){
ctfCommandArgs[x-1] = args[x];
}
ctfCommand.onCommand(player, ctfCommandArgs);
return true;
}
}
package net.strikecraft.Commands;
import net.strikecraft.CaptureTheFlag;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
public class CommandErrors {
public static String throwError(CommandSender sender, CTFCommandExecutor subCmd, String error){
if(error.startsWith("#")){
String hashError = null;
if(error.equals(INCORRECT_USAGE)){
hashError = "Incorrect usage. Type /ctf "+subCmd.usage();
sender.sendMessage(CaptureTheFlag.PREFIX+ChatColor.RED+hashError);
}
return hashError;
}
String errorMsg = CaptureTheFlag.PREFIX+ChatColor.RED+error;
sender.sendMessage(errorMsg);
return error;
}
public static final String NOT_A_PLAYER = "You must be a player in order to perform this action.";
public static final String NO_PERMISSION = "You do not have permission to this command.";
public static final String COMMAND_NOT_FOUND = "Command not found. Type /ctf help";
public static final String GAME_NOT_FOUND = "Game not found.";
public static final String GAME_ALREADY_EXISTS = "A game with this name already exists.";
public static final String INCORRECT_USAGE = "#incorrect-usage";
}