-4

このプログラムを3回実行した後、自動的にキャンセルしようとしていますが、「ローカル変数taskIdが初期化されていない可能性があります」というエラーが表示され続けます。一つには、これは危険です。2つは、コンパイラエラーが発生しても、適切にコンパイルしてプログラムを実行できますか?最後に、これをどのように修正しますか?ありがとう!

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)これは、匿名クラスが構築されたときにのみアクセスされるため、この場合は機能しません。つまり、設定される前です。

回避int[] task策は代わりに使用することですが、これは危険です。

より簡単な回避策は、IllegalStateExceptionまたは独自のRuntimeExceptionをスローすることです。これにより、タスクの繰り返しが停止します。

于 2012-06-11T06:58:21.803 に答える