我对此进行了研究,并尝试通过更改集合和迭代器的for循环来修复此异常,但这似乎无法解决。我仍然遇到相同的错误。
他是来自eclipse的错误日志:https://imgur.com/a/uqULZsw
这是我的BountyHunterController文件中的removeTarget函数
public void removeTarget(Player player) {
player.getTemporaryAttributtes().remove(TARGET_IDENTIFIER);
player.getPackets().sendIComponentText(1296, 25, "None");
Iterator<Player> iterator = getPlayers().iterator();
while (iterator.hasNext()) {
Player p = iterator.next();
Optional<Player> targ = minigame.getTarget(p);
if (targ.isPresent()) {
if (targ.get().getUsername().equalsIgnoreCase(player.getUsername())) {
p.getTemporaryAttributtes().remove(TARGET_IDENTIFIER);
p.getPackets().sendIComponentText(1296, 25, "None");
p.sendMessage("<col=FE1212>Your target has left, and you will be assigned another one.");
Controler con = p.getControlerManager().getControler();
if (con != null) {
if (con instanceof BountyHunterController) {
BountyHunterController bh = (BountyHunterController) con;
minigame.map.remove(type, player);
bh.assignTarget();
}
}
}
}
}
minigame.map.remove(type, player);
return;
}
这是第495行中的错误
播放器p = iterator.next();
注意:尝试离开和离开只是检查条件的布尔函数,因此错误仅来自于我提供的此函数。
我在做什么错,我该如何解决这个问题?
答案 0 :(得分:0)
如何处理迭代器并不重要: 不管是在后台使用for循环,还是在使用过程中编辑基础数据结构时,您自己都会这样做。
解决此问题的方法是:
1)如果可以,请不要使用迭代器,而应使用计数器访问元素。
例如:对于列表迭代器,请使用:
for(int i=0; i<player_list.size(); i++) {...
并在循环内:player = player_list.get(i)
2)遍历数据结构的副本,但这当然意味着复制。
3)保留大量的编辑内容,并在最后进行编辑。