-4

我试图让这个程序在运行 3 次后自行取消,但我不断收到“局部变量 taskId 可能尚未初始化”错误。因为其中一个是危险的。二尽管出现编译器错误,我仍然可以正确编译并运行程序吗?最后我将如何解决这个问题?谢谢!

final int taskId = plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
    int count = 0;
    @Override
    public void run() {
        ((LivingEntity) e.getEntity()).damage(2);
        count++;
        if (count > 2) {
            Bukkit.getScheduler().cancelTask(taskId);
        }
    }

}, 60L);
4

1 回答 1

2

您可能会在初始化之前尝试使用 taskId。

这在您的情况下不起作用,因为它不仅是在构造匿名类时访问,cancelTask(taskId)而是在构造匿名类时访问。即在它被设置之前。

一种解决方法是改用 a int[] task,但这是有风险的。

一个更简单的解决方法是抛出一个 RuntimeExceptionIllegalStateException或您自己的一个,因为这将停止任务重复。

于 2012-06-11T06:58:21.803 回答