java - 为什么variable.add(index, element)会产生空错误?

标签 java

我花了很多时间来解决这个问题,正如您通过所有 println 看到的那样。所以我需要问一下。为什么blocks.add可以工作,但是labels.add却出现错误null?

我的故障排除 println 返回“添加标签[1]:强度”,所以我知道值就在那里。

void load() {       
    String path = "menus.inventorys.stats";
    System.out.println("setting variables");
    // now load stat details from config
    System.out.println("default name");
    String defaultName = statConfig.getDefaults().getString(path + ".name");
    System.out.println("done");
    System.out.println("defaultslots");
    int defaultSlots = statConfig.getDefaults().getInt(path + ".slots");
    System.out.println("done");
    System.out.println("mame");
    name = statConfig.getString(path + ".name", defaultName);
    System.out.println("done");
    System.out.println("slots");
    slots = statConfig.getInt(path + ".slots", defaultSlots);
    System.out.println("done");

    InventoryController inventory = new InventoryController();
    ArrayList<Material> blocks = new ArrayList<>();
    ArrayList<String> labels = new ArrayList<>();
    ArrayList<String> slots = new ArrayList<>();

    if (statConfig.isSet(path + "slot")) {
        System.out.println("path to slots exists");
    }

    System.out.println("beginning loop");
    for (String slot : statConfig.getConfigurationSection(path + ".slot").getKeys(false)) {
        System.out.println("iterating material");
        Material block = (Material) statConfig.get(path + ".slot." + slot + ".block");
        System.out.println("material found");
        System.out.println("iterating label");
        String label = statConfig.getString(path + ".slot." + slot + ".label");
        System.out.println("label found");
        System.out.println("adding block");
        blocks.add(block);
        System.out.println("done");
        int blockSize = blocks.size();
        System.out.println("adding labels[" + blockSize + "]: " + label);
        labels.add(blockSize, label);
        System.out.println("done");
        System.out.println("adding slot");
        slots.add(blocks.size(), label);  // remember this is seperate from the arraylist for the block ItemStacks we will need to call this seperately
        System.out.println("done");
    }

[16:17:08] [Server thread/INFO]: done [16:17:08] [Server thread/INFO]: adding labels[1]: Strength [16:17:08] [Server thread/INFO]: done [16:17:08] [Server thread/INFO]: adding slot [16:17:08] [Server thread/ERROR]: null org.bukkit.command.CommandException: Unhandled exception executing command 'rift' in plugin rift v0.0.1 at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServer.java:646) ~[spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.PlayerConnection.handleCommand(PlayerConnection.java:1133) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.PlayerConnection.a(PlayerConnection.java:968) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:45) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.PacketPlayInChat.a(PacketPlayInChat.java:1) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_51] at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_51] at net.minecraft.server.v1_8_R2.SystemUtils.a(SourceFile:60) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.MinecraftServer.A(MinecraftServer.java:710) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:368) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:651) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java:554) [spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] at java.lang.Thread.run(Unknown Source) [?:1.8.0_51] Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheckForAdd(Unknown Source) ~[?:1.8.0_51] at java.util.ArrayList.add(Unknown Source) ~[?:1.8.0_51] at com.au.mshcraft.rift.StatModel.load(StatController.java:201) ~[?:?] at com.au.mshcraft.rift.StatController.open(StatController.java:52) ~[?:?] at com.au.mshcraft.rift.Rift.statView(Rift.java:100) ~[?:?] at com.au.mshcraft.rift.Rift.onCommand(Rift.java:81) ~[?:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot-1.8_server.jar:git-Spigot-dbe012b-61ef214] ... 15 more

最佳答案

您收到错误是因为您尚未初始化标签 ArrayList 中的元素。如果您从索引 0 开始添加,它会起作用,但由于索引 1 尚未为您初始化,因此会导致 indexoutofbounds 异常。

关于java - 为什么variable.add(index, element)会产生空错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941839/

相关文章:

java - java中如何连接字符串

java - 在 Java 中使用 RELAX NG 模式验证 xml 文件(IDE - Eclipse)

java - 如何将jscrollpane添加到jframe?

java - 使用哪些框架来分析 REST 服务的响应?

java - 使用 jquery 和 thymeleaf 动态显示图像

java - Linux 环境下如何对值进行四舍五入?

java - -XX :+PrintTenuringDistribution doesn't print size per age

java - ListView 控件(如 ComBox 控件)中 setConverter 的等效项在哪里?

java - 从方法返回数组

java - opencv中哪个函数可以检测并去除物体的阴影?