java - 我如何在 JDA 中的不同游戏状态消息之间循环?

标签 java discord discord-jda

我试图让机器人显示它的服务器计数,每 20 秒更新一次!

我尝试在等待就绪事件之后将其放入循环中:

public void onReady(ReadyEvent event) {

while (true) {

TimeUnit.SECONDS.sleep(20)
event.JDA().getPresence().setGame(Game.watching(event.getJDA().getGuilds().size() + "servers"));
}
}

这已成功显示它加入的服务器数量,但这阻止了任何其他代码的运行。

那么我怎样才能做到这一点而不忽略程序的其余部分呢?

最佳答案

您应该尝试设置一个时间间隔并对其进行更新

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable task = () -> {
event.JDA().getPresence().setGame(Game.watching(event.getJDA().getGuilds().size() + "servers"));
};

executor.scheduleWithFixedDelay(task, 0, 20,TimeUnit.SECONDS);

或使用计时器

Timer timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {   
event.JDA().getPresence().setGame(Game.watching(event.getJDA().getGuilds().size() + "servers"));
}
}, 0, 20000 );

将其设置在 while(true) 中会使其停止在那里,因为它在主线程上执行,而不创建一个新线程。

关于java - 我如何在 JDA 中的不同游戏状态消息之间循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57383480/

相关文章:

java - 未设置 Set-Cookie header

java - 无法获取 wkhtmltopdf 属性以在 Java 代码中使用

javascript - 变形不和谐文本

javascript - 如何将不和谐登录添加到 Chrome 扩展程序

python - 让机器人在完成工作后自动退出

java - EmbedBuilder 中的 Discord JDA Emote

java - 无法解析方法 'buildAsync()'

java - 在 android studio 中的每个新项目中获取 [不幸的是应用程序停止工作],但不是

java - 找不到 tools.jar。请检查 C :\Program Files\Java\jre1. 8.0_151 是否包含有效的 JDK 安装

java - 检测消息更新失败