web-dev-qa-db-fra.com

IllegalArgumentException: la liaison doit être positive

Je reçois une erreur disant que ma borne doit être positive. Voici la ligne sur laquelle je l'obtiens:

inv.setItem(i, items.get(r.nextInt(items.size())));

Pour autant que je sache, cela vient de la partie où je demande un entier aléatoire dans la liste des éléments. Voici comment j'ai défini la liste:

List<ItemStack> items = getAllItems(level);

Où la méthode getAllItems() ressemble:

public List<ItemStack> getAllItems(int level) {
    List<ItemStack> items = new ArrayList<ItemStack>();
    for (String item : settings.getChests().getStringList("chestitems." + level)) {
        ItemStack toAdd = parseItem(item);
        items.add(toAdd);
    }
    return items;
}

Je reçois ce stacktrace:

[19:03:53 ERROR]: Error occurred while enabling KitPvP v0.5 (Is it up to date?)
Java.lang.IllegalArgumentException: bound must be positive
        at Java.util.Random.nextInt(Unknown Source) ~[?:1.8.0_51]
        at me.iamguus.gamegetsiepunt.kitpvp.chests.ChestsUtil.randomlyFillInv(ChestsUtil.Java:101) ~[?:?]
        at me.iamguus.gamegetsiepunt.kitpvp.Main.onEnable(Main.Java:40) ~[?:?]
        at org.bukkit.plugin.Java.JavaPlugin.setEnabled(JavaPlugin.Java:321) ~[spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.plugin.Java.JavaPluginLoader.enablePlugin(JavaPluginLoader.Java:335) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.Java:405) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.Java:356) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.Java:316) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.Java:746) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.Bukkit.reload(Bukkit.Java:534) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.Java:25) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.Java:141) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.Java:646) [spigot.jar:git-Spigot-5818108-a486600]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(CraftServer.Java:632) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.Java:405) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.Java:369) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.Java:657) [spigot.jar:git-Spigot-5818108-a486600]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.Java:560) [spigot.jar:git-Spigot-5818108-a486600]
        at Java.lang.Thread.run(Unknown Source) [?:1.8.0_51]
7
Guus Huizen

Le problème est que vous appelez Random.nextInt() avec un zéro et ça n'aime pas ça. Cela se produit car le List de getAllItems() est vide. Je voudrais éviter cette situation en vérifiant que la liste contient des éléments avant d'exécuter votre logique:

List<ItemStack> items = getAllItems(level);
if(!items.isEmpty()) {
    inv.setItem(i, items.get(r.nextInt(items.size())));
}
16
Todd

En ce qui concerne votre stacktrace,

Java.lang.IllegalArgumentException: la liaison doit être positive à Java.util.Random.nextInt (Source inconnue) ~ [?: 1.8.0_51]

L'argument de nextInt doit être un entier positif. Vous devrez savoir où vous passez une entrée non positive à cette méthode.

4
Swapnil