【问题标题】:java.lang.IndexOutOfBoundsException Error Bukkit Pluginjava.lang.IndexOutOfBoundsException 错误 Bukkit 插件
【发布时间】:2013-08-05 11:40:25
【问题描述】:

好的,我目前正在开发一个 Bukkit 插件,并决定添加一个安排广播的功能。为了存储广播,我使用了 config.yml 文件并从那里获取广播。我遇到的问题是代码不断返回,并且我还无法修复 IndexOutOfBoundsException。

这是我的代码:

package uk.co.thek4web.broadcaster;

import java.util.List;
import org.bukkit.scheduler.BukkitRunnable;

public class bcscheduler extends BukkitRunnable {

    private Broadcaster plugin;
    public bcscheduler(Broadcaster plugin){
        this.plugin = plugin;
    }
    private int bcnumber = 0;
    public void run() {
        //String list from config
        List<String> bcm = plugin.message();
        //Broadcasts the next broadcast messsage in the config
        plugin.bc(bcm.get(bcnumber));
        //Makes sure broadcasts don't repeat, goes onto the next broadcast.
        if(bcnumber < bcm.size()){
            bcnumber++;
        }
        else{
            bcnumber = 0;
        }
    }

}

这是我不断遇到的异常:

2013-08-04 20:20:43 [WARNING] [Boss Broadcast] Task #4 for Boss Broadcast v0.3 generated an exception
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
    at java.util.ArrayList.rangeCheck(ArrayList.java:603)
    at java.util.ArrayList.get(ArrayList.java:381)
    at uk.co.thek4web.broadcaster.bcscheduler.run(bcscheduler.java:16)
    at org.bukkit.craftbukkit.v1_6_R2.scheduler.CraftTask.run(CraftTask.java:53)
    at org.bukkit.craftbukkit.v1_6_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345)
    at net.minecraft.server.v1_6_R2.MinecraftServer.t(MinecraftServer.java:522)
    at net.minecraft.server.v1_6_R2.DedicatedServer.t(DedicatedServer.java:226)
    at net.minecraft.server.v1_6_R2.MinecraftServer.s(MinecraftServer.java:486)
    at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:419)
    at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)

我尝试了一些方法,但都没有奏效,因此对于我到底哪里出错的任何想法将不胜感激。

【问题讨论】:

  • 我认为if(bcnumber &lt; bcm.size()){ 是你的问题。当它比bcm.size() 小一时,它仍然会增加一次大小。所以,bcm.size() - 1 修复了它。

标签: java plugins bukkit


【解决方案1】:

使用

if(bcnumber

假设大小为 3,索引将为 0,1,2。考虑 bcnumber = 2 的情况

【讨论】:

    【解决方案2】:

    使用

    public void run() {
      List<String> bcm = plugin.message();
      plugin.bc(bcm.get(bcnumber++));
      bcnumber = bcnumber % bcm.size();
    }
    

    【讨论】:

      【解决方案3】:

      您的问题是您超出了列表大小。顺便说一下关于你的代码的一些建议

       List<String> bcm = plugin.message(); 
      
      // You must check that your list isn't empty before doing your instructions
       if((bcm != null) && !bcm.isEmpty()){
          plugin.bc(bcm.get(bcnumber));
      
      
          if(bcnumber < bcm.size()-1){
              bcnumber++;
          }
          else{
              bcnumber = 0;
          }
       }
      
      
      }
      

      【讨论】:

        猜你喜欢
        • 2014-04-16
        • 2015-03-14
        • 2014-09-04
        • 2014-08-16
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        • 2016-12-15
        • 1970-01-01
        相关资源
        最近更新 更多