首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭ScheduledExecutorService

关闭ScheduledExecutorService
EN

Stack Overflow用户
提问于 2020-08-02 05:25:48
回答 1查看 52关注 0票数 1

所以我有一个不和谐的机器人,我试图每小时发送一条消息。我使用预定的executor服务让这部分代码正常工作。我说的时候就开始了!未来

我希望在发送时能够阻止它!未来关闭

但是,我不能让它正常工作。下面是我的代码:

代码语言:javascript
复制
    String[] args = event.getMessage().getContentRaw().split(" ");
    if (args[0].equalsIgnoreCase("!futuresOn")) {
    Color red = new Color(255, 0, 0);
    Color green = new Color(0, 204, 0);
       Runnable futRun = new Runnable() {
       public void run() {
        EmbedBuilder futuresBot = new EmbedBuilder();
        futuresBot.setAuthor("Futures Bot", null, event.getAuthor().getAvatarUrl());
   
        try {
    futuresBot.addField("**S&P 500**", getSPY(), false);
    futuresBot.addField("**NASDAQ**", getNASDAQ(), false);
    futuresBot.addField("**DOW**", getDOW(), false);
    if (getSPY().contains("+")) {
    futuresBot.setColor(green);
    } 
    else {
    futuresBot.setColor(red);
    }
        }
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
   
   
        futuresBot.setFooter("Cantina Capital", event.getGuild().getIconUrl());
        event.getChannel().sendMessage(futuresBot.build()).queue();
   
       }
      
    };
    
    exec.scheduleAtFixedRate(futRun, 0, 1, TimeUnit.HOURS);
    
    
    }
    if (args[0].equalsIgnoreCase("!futuresoff")) {
    event.getChannel().sendMessage("Futures bot off.").queue();
    exec.shutdownNow();
    }

我已经尝试了几种不同的方法,但我不能让它正常工作。它进入了!futuresoff部分,因为它发送了Futures机器人关闭的消息。我只希望它能够在发送!futureson时每小时发送一次消息,而不是在发送!futuresoff时发送消息。我也尝试过ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(0);

我将非常感谢任何能为我指明正确方向的人或帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 06:18:41

首先,您应该将scheduleAtFixedRate()的结果保存在侦听器类中。

代码语言:javascript
复制
ScheduledFuture scheduledFuture = null;

然后,您可以在此对象上使用cancel()来停止它。您还应在调度前测试它是否为空,并在取消之前测试它是否已设置:

代码语言:javascript
复制
String[] args = event.getMessage().getContentRaw().split(" ");
if (args[0].equalsIgnoreCase("!futuresOn")) {
    Color red = new Color(255, 0, 0);
    Color green = new Color(0, 204, 0);
    Runnable futRun = new Runnable() {
        public void run() {
            EmbedBuilder futuresBot = new EmbedBuilder();
            futuresBot.setAuthor("Futures Bot", null, event.getAuthor().getAvatarUrl());

            try {
                futuresBot.addField("**S&P 500**", getSPY(), false);
                futuresBot.addField("**NASDAQ**", getNASDAQ(), false);
                futuresBot.addField("**DOW**", getDOW(), false);
                if (getSPY().contains("+")) {
                    futuresBot.setColor(green);
                }
                else {
                    futuresBot.setColor(red);
                }
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            futuresBot.setFooter("Cantina Capital", event.getGuild().getIconUrl());
            event.getChannel().sendMessage(futuresBot.build()).queue();

        }

    };

    if (scheduledFuture == null)
        scheduledFuture = exec.scheduleAtFixedRate(futRun, 0, 1, TimeUnit.HOURS);


}
if (args[0].equalsIgnoreCase("!futuresoff")) {
    event.getChannel().sendMessage("Futures bot off.").queue();
    if (scheduledFuture != null) {
        scheduledFuture.cancel(true);
        scheduledFuture = null;
    }
}
    ```
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63210222

复制
相关文章

相似问题

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