You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spigot插件调用ThreadLocalRandom.nextInt报bound must be positive错误如何解决

问题原因

java.lang.IllegalArgumentException: bound must be positive 是ThreadLocalRandom.nextInt(int bound)方法的典型报错,该方法要求传入的边界参数必须为正整数,你代码中传入的是mapNames.length,说明执行到该行时mapNames数组长度为0,是空数组。
结合代码逻辑可以定位到根因:你调用mapsConfiguration.getKeys(false)拿到的键集合是空的,要么是配置文件中mapsConfiguration对应的节点下没有配置任何子地图项,要么是mapsConfiguration初始化时读取的配置路径错误,没有加载到正确的配置节点。从错误栈也可以确认,报错位置就是该随机取地图名称的方法,完全匹配参数非法的场景。

解决方案

1. 先加前置校验避免报错

修改randomMapName方法,在调用随机方法前先判断数组是否为空,提前抛出明确的业务提示或者返回默认值,避免触发随机数的非法参数异常:

public String randomMapName()
{
    String[] mapNames = mapsConfiguration.getKeys(false).toArray(new String[]{});
    // 新增非空校验
    if (mapNames.length == 0) {
        // 二选一即可:
        // 方案A:抛出明确异常,方便排查配置问题
        throw new IllegalStateException("未读取到任何可用地图,请检查配置文件的地图配置项是否正确");
        // 方案B:返回预设的默认地图名,兼容无配置的场景
        // return "default_bedwars_map";
    }
    return mapNames[ThreadLocalRandom.current().nextInt(mapNames.length)];
}

2. 排查配置加载逻辑

  • 检查你的插件配置文件中,mapsConfiguration对应的节点下是否有正确配置地图项,注意YAML配置的缩进、键名拼写是否符合预期
  • 检查mapsConfiguration的赋值逻辑,确认你读取配置的路径和配置文件中的结构完全匹配,没有因为配置文件未加载、路径写错导致拿到空的配置节点

3. 新增启动校验

可以在插件onEnable方法中提前调用一次校验逻辑,检测是否存在可用地图,如果为空直接在控制台打印错误日志提示管理员配置异常,避免运行到游戏逻辑时才触发报错。

内容的提问来源于stack exchange,提问作者mlagie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:54:02