gpt4 book ai didi

Java 数组属性越界异常

转载 作者:行者123 更新时间:2023-12-01 17:00:28 25 4
gpt4 key购买 nike

我正在尝试利用 .properties 文件来获取字符串列表,并将它们转换为数组,以便稍后在我的程序中使用 javassist 添加。但是,我不断收到 arrayoutofboundsException 0,属性中包含以下数据:修改.spells.in。

    void configure(Properties options)
{
String nameSpace;
ArrayList<String> spellList = new ArrayList<String>();
String[] tokens;

for(String key : options.stringPropertyNames()) {
if(key.startsWith("modify.spells.in.")) {
nameSpace = key.substring(17);
tokens = options.getProperty(key).split(",");
for(String token : tokens) {
if(spellList.contains(nameSpace + "." + token)) {
continue;
}

spellList.add(nameSpace + "." + token);
}
}
}

if(spellList.size() == 0) {
itemSpells = new String[]{
"Fire1", "Fire2", "Fire3", "Lit1", "Lit2", "Lit3", "Ice1", "Ice2",
"Ice3"
};

for(int i = 0; i < itemSpells.length; i++) {
itemSpells[i] = "com.ragdoll.spells." + itemSpells[i];
}
} else {
itemSpells = spellList.toArray(new String[0]);
}

属性文件字符串如下:modify.spells.in.com.ragdoll.spells=Fire3,Lit3,Ice3

编辑现有代码的表达式如下:

我有一个HookManager要添加到interceptSpells(itemSpells);

    private void interceptSpells(String[] classes) throws NotFoundException, CannotCompileException
{
CtClass c;
ClassPool cp = HookManager.getInstance().getClassPool();
CtMethod m = null;

// CAST -

for(int i = 0; i < classes.length; i++) {
final int j = i;
c = cp.get(classes[i]);
m = c.getDeclaredMethods("doEffect")[0];
m.instrument(new ExprEditor() {
public void edit(MethodCall m) throws CannotCompileException {
if (m.getMethodName().equals("addSpellEffect")) {
logger.info("Intercepting (1) " + classes[j]);
m.replace(
"$_ = $proceed($$);"
+ "com.rev.spellmod.getInstance().addSpellEffectCaster($0, eff, performer); "
);
} else if(m.getMethodName().equals("improvePower")) {
logger.info("Intercepting (2) " + classes[j]);
m.replace(
"$_ = $proceed($$);"
+ "com.rev.spellmod.getInstance().replaceSpellEffectCaster($0, eff, performer); "
);
}
}
});

我感觉好像我已经声明了命名空间并正确地分割了列表。如果我在 .properties 文件中只添加一个咒语,它就可以工作。一旦我添加多个,它就会指向带有 arrayoutofboundsException 的拦截代码。如果我将其留空,它也适用于预先确定的咒语,但我希望能够随时修改咒语,而不是每次都重新编译。

任何想法或帮助将不胜感激!

最佳答案

我意识到 doEffect 是问题所在。一些咒语从另一个类继承了 doEffect,因此会产生 ArrayOutOfBoundsException,而不是正确的字符串解析。

关于Java 数组属性越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61514381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com