【问题标题】:Creating Thread from ListenerAdapter stops it from listening for events Java JDA从 ListenerAdapter 创建线程会阻止它监听事件 Java JDA
【发布时间】:2020-05-09 21:11:26
【问题描述】:

您好,我正在开发这个 JDA Discord Bot,但我在 Threads 方面有点挣扎。我的主要机器人类扩展了 ListenerAdapter,我希望它监听一个命令,然后启动一个预定的服务以每周发布一次消息。问题是当创建线程时它开始执行但主类停止监听。

想知道我是否应该创建一个作为 ListenerAdapter 的内部类,并将它们都放在线程中,或者我是否缺少另一个解决方案。我在 uni 做过一些 Threads 的工作,但没有太多经验。

public class Main extends ListenerAdapter {
static Thread SER;

public static void main(String[] args) throws LoginException {
... 
}
@Override
public void onMessageReceived(MessageReceivedEvent event){
if(event.getMessage().getContentRaw().equals("!startmessages")){
        try {
            SER = new Thread(new ScheduledExecutorRepeat(event.getChannel(),event.getGuild()));
            ExecutorService executor = Executors.newCachedThreadPool();
            executor.submit(SER);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Creating messages");
    }
}
class ScheduledExecutorRepeat implements Runnable {

private int count = 0;
MessageChannel channel;
Guild guild;
ScheduledExecutorService ses;
ScheduledFuture<?> scheduledFuture;

public ScheduledExecutorRepeat(MessageChannel mc,Guild g) throws InterruptedException {

    channel = mc;
    guild = g;

    ses = Executors.newScheduledThreadPool(1);
    run();



}
public void run(){

    Runnable task1 = () -> {
        count++;
        System.out.println("Running...Weekly Message - count : " + count);

    };

    // init Delay = 5, repeat the task every 1 second
    scheduledFuture = ses.scheduleAtFixedRate(task1, 5, 1000*60*60*24*7, TimeUnit.SECONDS);

    while (true) {
        System.out.println("count :" + count);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java discord-jda


    【解决方案1】:

    程序在 ScheduledExecutorRepeat 类结束时卡在循环中。删除 while 循环解决了这个问题。预定的消息有效,机器人仍在侦听消息。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 2012-09-11
      • 2023-03-14
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2016-10-12
      相关资源
      最近更新 更多