首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >取消的BukkitTask继续运行

取消的BukkitTask继续运行
EN

Stack Overflow用户
提问于 2017-10-16 17:17:48
回答 1查看 399关注 0票数 1

我用服务器列表做了一个胸部图。当player打开它时,它必须开始更新,当player打开其他gui /闭合当前时,它必须取消更新。首先,当player运行命令时,执行openMenu(Player)方法:

代码语言:javascript
代码运行次数:0
运行
复制
public void openMenu(Player player) {
    // Creating inv, filling, etc

    player.openInventory(inv);
    updateMenu(player, inv);
}

因此,打开菜单,开始更新:

代码语言:javascript
代码运行次数:0
运行
复制
public void updateMenu(Player player, Inventory inv) {
    BukkitTask task = Bukkit.getServer().getScheduler().runTaskTimer(ServerSelect.instance, new Runnable() {
        @Override
        public void run() {
            Bukkit.getServer().getLogger().log(Level.INFO, "Trying to update menu.");
            if (!player.getOpenInventory().getTopInventory().getTitle().equals(inv.getTitle())) {
                Bukkit.getServer().getLogger().log(Level.INFO, "Closed.");
                MenuManager.menuUpdaters.get(player.getName()).cancel(); // Does not work? :/
            }
            Bukkit.getServer().getLogger().log(Level.INFO, "Updating menu.");

            // Updating inventory ...
        }
    }, 60L, 60L);
    MenuManager.menuUpdaters.put(player.getName(), task);
}

问题是即使在取消任务继续运行之后,日志:

代码语言:javascript
代码运行次数:0
运行
复制
Trying to update menu.
Closed.
Updating menu.

Trying to update menu.
Closed.
Updating menu.

运行PaperSpigot 1.12.1我打印了isCancelled(),第一次运行时它说是false,然后每次是true,但是任务继续执行。想想看我能做什么。我也试过:

  1. 取消它,引用其他静态方法。
  2. 在新runTask中取消它(插件,可运行)
  3. 用Bukkit.getScheduler().cancelTask(task.getTaskId())取消
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 18:23:36

刚解决了。当玩家单击其他项目时,问题是将旧任务重写为hashmap。所以它取消了新的任务,而不是旧的任务。我添加了取消任务,并在玩家单击项目(必须打开其他gui)或关闭gui时从hashmap中删除它。抱歉,把你的时间浪费在我的错误上。感谢Squiddie给了我正确的方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46775724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档