クールダウン タイマーから ConcurrentModificationException を取得しています。次のように、スレッドを使用して毎秒値を減らします。
public class CoolDownTimer implements Runnable {
@Override
public void run() {
for (String s : playerCooldowns.keySet()) {
playerCooldowns.put(s, playerCooldowns.get(s) - 20);
if (playerCooldowns.get(s) <= 0) {
playerCooldowns.remove(s);
}
}
}
}
したがって、毎秒、すべてのプレーヤーのクールダウンが 20 ずつ減少するはずですが、問題は、特に多くの人がオンラインになっている場合、プログラムの実行中に数時間ごとに CME を取得することです. まだリストを変更している場合、現在の操作が完了するまで待機し、一種の変更キューを作成するようにするにはどうすればよいですか? ありがとう!スタック トレースは次のとおりです。
2012-06-18 20:59:05 [WARNING] Task of 'SurvivorsClasses' generated an exception
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:839)
at java.util.HashMap$KeyIterator.next(HashMap.java:874)
at me.zachoooo.survivorclasses.CoolDownManager$CoolDownTimer.run(CoolDownManager.java:13)
at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:126)
at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:533)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:459)
13行目は for ループの始まりです...