我如何在 JDA 中的不同游戏状态消息之间循环?
How can i cycle between different game status messages in 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)
中使其停在那里,因为它在主线程上执行而无需创建新线程。
我正在尝试让机器人显示它的服务器数量,它每 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)
中使其停在那里,因为它在主线程上执行而无需创建新线程。