Java bukkit可运行非法状态异常
伙计们,我正在制作一个插口1.8插件。它在1.16中起作用,但在1.8中它抛出了以下内容:Java bukkit可运行非法状态异常,java,minecraft,illegalstateexception,Java,Minecraft,Illegalstateexception,伙计们,我正在制作一个插口1.8插件。它在1.16中起作用,但在1.8中它抛出了以下内容: [10:00:59 ERROR]: Could not pass event InventoryClickEvent to Knockback_PVP v1.0.0 ..... org.bukkit.event.EventException Caused by: java.lang.IllegalStateException: Already scheduled as 1201 at or
[10:00:59 ERROR]: Could not pass event InventoryClickEvent to Knockback_PVP v1.0.0
.....
org.bukkit.event.EventException
Caused by: java.lang.IllegalStateException: Already scheduled as 1201
at org.bukkit.scheduler.BukkitRunnable.checkState(BukkitRunnable.java:141) ~[spigot-1.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-c3c767f-33d5de3]
at org.bukkit.scheduler.BukkitRunnable.runTask(BukkitRunnable.java:31) ~[spigot-1.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-c3c767f-33d5de3]
...
以下是我代码的一部分:
BukkitRunnable runnable = new BukkitRunnable() {
@Override
public void run() {
if (plugin.RegenTasks.containsKey(getTaskId()) == false) return;
Player p = plugin.RegenTasks.get(getTaskId());
p.getInventory().setItem(3, new ItemStack(Material.DIAMOND));
plugin.RegenTasks.remove(getTaskId());
return;
}
};
runnable.runTaskLater(plugin, 2*20*30);
plugin.RegenTasks.put(runnable.getTaskId(),p);
在其他地方,当玩家死亡时:
if (plugin.RegenTasks.containsValue(p)){
for (int i: plugin.RegenTasks.keySet()) {
if (plugin.RegenTasks.get(i) == p) {
plugin.RegenTasks.remove(i);
try
{plugin.getServer().getScheduler().cancelTask(i);}
finally {break;}
}
}
}
有什么办法可以解决吗?您只能安排一次bukkitrunable。您的错误消息也会告诉您 已安排为1201 看看Javadoc: 因此,要么只调用runnable一次,要么安排您的任务,例如:
我知道那个错误是什么,但我很困惑,因为我从未多次运行过它。您的代码的哪一行导致了这个验证?