第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用計時器刪除 ListenerAdapter

使用計時器刪除 ListenerAdapter

慕雪6442864 2023-04-26 17:20:52
所以我有以下問題,我想在文本頻道上制作一個迷你游戲,問題是,我想創(chuàng)建某種超時,這樣人們就不會創(chuàng)建多個只會使機(jī)器人過載的“l(fā)istenerAdapter”實例。我用來加載我的游戲事件的命令(ListenerAdapter 如下)。@Overridepublic void handle(List<String> args, GuildMessageReceivedEvent event) {    // TODO Auto-generated method stub    TextChannel channel = event.getChannel();    channel.sendMessage("please type \"joingame\" to join! ").queue();    event.getJDA().addEventListener(new MinigameEvent(channel, event.getAuthor(), event));}然后,我用來加載播放器的代碼如下:當(dāng)我達(dá)到 3 人時,偵聽器適配器會按預(yù)期停止工作,當(dāng)事件的作者(使用 !minigame 命令的人)類型取消時也是如此。但是當(dāng)計時器關(guān)閉時,它會發(fā)送消息表明游戲已被取消,但偵聽器適配器仍在運(yùn)行,如果有人試圖在之后加入,它將允許他這樣做。我目前通過使用 finalize 方法解決了這個問題,但我認(rèn)為你可以做一些像 event.getJDA().removeEventListener(this); 這樣的事情。
查看完整描述

1 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗 獲得超10個贊

你的問題是你this指的是最近的類聲明。在這種情況下,這是由您創(chuàng)建的匿名類new TimeTask() { ...。要引用實際注冊為偵聽器的外部類,您必須MinigameEvent.this改為使用。

我強(qiáng)烈建議使用沒有此問題的 lambda 表達(dá)式。另一件需要注意的事情是您使用計時器會導(dǎo)致線程泄漏,因為它們永遠(yuǎn)不會被您的代碼關(guān)閉(如何清理計時器)。更好的辦法是使用一個ScheduledExecutorService你應(yīng)該重復(fù)使用的單一來安排你需要的一切,而不是為每個任務(wù)創(chuàng)建一個新的。一旦您的進(jìn)程結(jié)束,它就可以關(guān)閉(就像 JDA 中的 onShutdown 事件,它在調(diào)用 shutdown() 時觸發(fā))。


查看完整回答
反對 回復(fù) 2023-04-26
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號