Java 未处理的异常类型异常?

Java 未处理的异常类型异常?,java,bukkit,Java,Bukkit,我正在尝试创建一个插件,它接受essentials命令/item,并为每个项目提供知识 我正在编写的代码还没有知识部分,现在我只专注于重写/item命令,以便编辑它 public class main extends JavaPlugin implements Listener { public static Bukkit plugin; @Override public void onEnable() { Bukkit.getServer().

我正在尝试创建一个插件,它接受essentials命令
/item
,并为每个项目提供知识

我正在编写的代码还没有知识部分,现在我只专注于重写
/item
命令,以便编辑它

public class main extends JavaPlugin implements Listener {
    public static Bukkit plugin;

    @Override
    public void onEnable()
    {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);

        Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "Enabled!");
    }

    @Override
    public void onDisable()
    {
        getLogger();
        Bukkit.getConsoleSender().sendMessage(ChatColor.DARK_RED + "Disabled!");
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (cmd.getName().equalsIgnoreCase("item")) { 

            Player user = (Player)sender;
            if (args.length < 1)
            {
                user.sendMessage("Not enough arguments");
            }
            Essentials essentials = (Essentials)getServer().getPluginManager().getPlugin("Essentials");

              IItemDb itemDB = essentials.getItemDb();
              ItemStack stack = essentials.getItemDb().get(args[0]);


            final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", "");
            try
            {
                if (args.length > 1 && Integer.parseInt(args[1]) > 0)
                {
                    stack.setAmount(Integer.parseInt(args[1]));
                }
                }
            catch (NumberFormatException e)
            {
                user.sendMessage("Not enough arguements");
            }
            if (args.length > 2)
            {
                MetaItemStack metaStack = new MetaItemStack(stack);
                final boolean allowUnsafe = user.hasPermission("essentials.enchantments.allowunsafe");

                stack = metaStack.getItemStack();
            }


            if (stack.getType() == Material.AIR)
            {
                user.sendMessage("Can not spawn air");
            }

            final String displayName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
            user.sendMessage("Given " + stack.getAmount() + " " + displayName);
            if (user.hasPermission("essentials.oversizedstacks"))
            {
                InventoryWorkaround.addOversizedItems(user.getInventory(), 111, stack);
            }
            else
            { 
                InventoryWorkaround.addItems(user.getInventory(), stack);
            }
            user.updateInventory();
            return true;
        }
            return false; 
    }
}
我得到一个错误:

未处理的异常类型异常


我可以通过重新排列底部大括号来解决这个问题,但是在底部大括号中会出现错误。有人知道发生了什么事吗

这是因为
IItemDb.get(String)
抛出一个选中的异常,而您没有处理该异常。必须处理选中的异常,否则将抛出编译时错误。发件人:

Java编程语言要求程序包含检查异常的处理程序,这些异常可能是由方法或构造函数的执行导致的。对于每个检查的异常(可能的结果),方法的
抛出
子句
或构造函数必须提到该异常的类或该异常类的超类之一

(强调矿山)

因此,您必须扩展您的方法签名:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) throws Exception
public boolean onCommand(CommandSender、Command cmd、String label、String[]args)在该行中引发异常
ItemStack stack=essentials.getItemDb().get(args[0])可以引发
异常

要处理它(这是必须的),您必须用try/catch块围绕这条线

try {
    ItemStack stack = essentials.getItemDb().get(args[0]); 
} catch(Exception e) {
    e.printStackTrace();
}

此外,您可能还想阅读以下内容:

是的,任何对Java稍有了解的人都知道发生了什么。请通读一遍。还请注意,SO不是一个教初学者如何编码的网站,而是一个专业和热心程序员的网站——我们希望您了解基础知识,并且有大量的资源来学习它们。在提出进一步的问题之前,先做你自己的研究,只有当你确定自己偶然发现了一个还没有详细记录的问题时,才作为最后手段继续提问。
try {
    ItemStack stack = essentials.getItemDb().get(args[0]); 
} catch(Exception e) {
    e.printStackTrace();
}