3079655185 发表于 2020-8-10 13:08:53

如何结束new BukkitRunnable()创建的延时任务

new BukkitRunnable()这个代码可以创建延时任务/循环任务,当然一般都是用异步的。我当然知道可以在延时任务内部写this.cancel();,而且可以在@Override
public void run() {      这个位置}
加上一个判断,可以是一个变量,操纵这个变量,即可控制这个任务的开关。例如
public static Boolean a = true;

@Override
public void run() {      if(a = false){      this.cancel();
      }}
通过把a设置为false,即可关闭这个任务。但是有没有方法直接关闭这个任务,而不需要这个任务运行。

疾风暗影 发表于 2020-8-10 13:11:23

Bukkit.getSheduler().cancelTask(id)

3079655185 发表于 2020-8-10 13:31:58

疾风暗影 发表于 2020-8-10 13:11
Bukkit.getSheduler().cancelTask(id)

哦哦,原来还有这个方法,谢了

3079655185 发表于 2020-8-10 13:45:29

疾风暗影 发表于 2020-8-10 13:11
Bukkit.getSheduler().cancelTask(id)

我想追问一下,JAVA自带的有没有自带的一个节点对应一个值的信息储存方法。比如说A节点对应a,B节点对应b,(有点yml那味)

疾风暗影 发表于 2020-8-10 13:49:17

3079655185 发表于 2020-8-10 13:45
我想追问一下,JAVA自带的有没有自带的一个节点对应一个值的信息储存方法。比如说A节点对应a,B节点对应b ...

https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

3079655185 发表于 2020-8-10 13:52:28

疾风暗影 发表于 2020-8-10 13:49
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

多谢指路

Sssss... 发表于 2020-8-10 14:16:58

为什么一定要this?
直接在外面task.cancel()啊

William_Shi 发表于 2020-8-10 15:15:56

Sssss... 发表于 2020-8-10 14:16
为什么一定要this?
直接在外面task.cancel()啊

准确的来说,我们并不是创建“任务调度器”,任务调度器本身存在,我们创建的应该是“BukkitTask”(注意返回值),那么BukkitTask可以cancel

3079655185 发表于 2020-8-10 16:06:01

Sssss... 发表于 2020-8-10 14:16
为什么一定要this?
直接在外面task.cancel()啊

我同一个延时任务,运行了很多遍,且都还没有到时间,如果用task.cancel()岂不是这些都会取消?
我想要是仅取消一个

William_Shi 发表于 2020-8-10 17:56:07

3079655185 发表于 2020-8-10 16:06
我同一个延时任务,运行了很多遍,且都还没有到时间,如果用task.cancel()岂不是这些都会取消?
我想要是 ...

同一个BukkitRunnable的子类(或者是匿名内部类)
你new一次都会有一个新的BukkitTask
然后BukkitTask有一个方法cancel
使用就像是task.cancel()一样,面向对象
一次仅取消一个任务,就是这个任务对象所对应的任务

3079655185 发表于 2020-8-10 18:10:15

疾风暗影 发表于 2020-8-10 13:49
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html

怎么修改map里的某个key对应的值,我看到了replace方法,但是那参数给我整蒙了,没看懂。
如果已有A键对应的值为a,我put(A,b),会不会替换掉?

洞穴夜莺 发表于 2020-8-10 18:15:46

3079655185 发表于 2020-8-10 18:10
怎么修改map里的某个key对应的值,我看到了replace方法,但是那参数给我整蒙了,没看懂。
如果已有A键对 ...

会,这个你看一下javadoc就知道了

3079655185 发表于 2020-8-10 18:26:04

洞穴夜莺 发表于 2020-8-10 18:15
会,这个你看一下javadoc就知道了

所以说我直接put就可以修改喽

洞穴夜莺 发表于 2020-8-10 18:26:54

3079655185 发表于 2020-8-10 18:26
所以说我直接put就可以修改喽

直接put就是了

Sssss... 发表于 2020-8-11 11:53:15

3079655185 发表于 2020-8-10 16:06
我同一个延时任务,运行了很多遍,且都还没有到时间,如果用task.cancel()岂不是这些都会取消?
我想要是 ...

运行了很多遍???

对不起,一个任务只会运行一遍,否则直接抛出异常
页: [1] 2
查看完整版本: 如何结束new BukkitRunnable()创建的延时任务