Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Discord bot每30秒更改一次状态活动jda_Java_Discord Jda - Fatal编程技术网

Java Discord bot每30秒更改一次状态活动jda

Java Discord bot每30秒更改一次状态活动jda,java,discord-jda,Java,Discord Jda,我想让机器人每30秒刷新/更改两条不同消息的状态(活动) jda.getPresence().setActivity(Activity.playing("message1")); jda.getPresence().setActivity(Activity.playing("message2")); 基本上,您需要创建一个包含消息和索引的数组,该索引在0和最后一条消息之间交替: String[]messages={“message 1”,“message

我想让机器人每30秒刷新/更改两条不同消息的状态(活动)

jda.getPresence().setActivity(Activity.playing("message1"));
jda.getPresence().setActivity(Activity.playing("message2"));

基本上,您需要创建一个包含消息和索引的数组,该索引在0和最后一条消息之间交替:

String[]messages={“message 1”,“message 2”};
int currentIndex=0;
每30秒,您可以执行以下操作:

jda.getPresence().setActivity(Activity.playing(messages[currentIndex]);
currentIndex=(currentIndex+1)%messages.length;
首先,这个元素(currentIndex数组中的元素)

在此之后,它将
1
添加到
currentIndex

如果
currentIndex
超过数组长度,它将再次将其设置为
0
。这是使用

为了每30秒执行一次,您可以使用以下方法之一:

java.util.Timer 执行此操作的旧方法是创建一个
计时器

//在任何方法之外
私有字符串[]消息={“消息1”,“消息2”};
私有int currentIndex=0;
//运行一次
新建计时器()。计划(新建计时器任务()){
公开募捐{
jda.getPresence().setActivity(Activity.playing(messages[currentIndex]);
currentIndex=(currentIndex+1)%messages.length;
}},0,30_000);
可以在特定延迟后执行
TimerTask
(如果希望立即启动,则为0),并在指定时间段后重复执行(延迟和时间段均以毫秒为单位)

java.util.concurrent.ScheduledExecutorService 也可以使用允许更多定制的
ScheduledExecutorService
(这种方法被认为比
Timer
更好,如Java Concurrency in Practice第6.2.5章所述):

//在任何方法之外
私有字符串[]消息={“消息1”,“消息2”};
私有int currentIndex=0;
private ScheduledExecutorService threadPool=Executors.newSingleThreadScheduledExecutor();
//运行一次
threadPool.schedule with fixedDelay(()->{
jda.getPresence().setActivity(Activity.playing(messages[currentIndex]);
currentIndex=(currentIndex+1)%messages.length;
},0,30,时间单位为秒);
//当您想要停止它时(例如,当机器人停止时)
threadPool.shutdown();
首先,创建一个线程池,允许调度任务

此线程池也可用于其他任务

在本例中,这是使用单个线程完成的。如果要使用多个线程,可以使用
Executors.newScheduledThreadPool(numberOfThreads)

在此之后,每隔30秒调用运行提供的
Runnable

如果希望在应用程序停止时自动停止而不调用
shutdown()
,可以通过指定
ThreadFactory
,告诉它使用守护进程线程:

ScheduledExecutorService threadPool=Executors.newSingleThreadScheduledExecutor(r->{
螺纹t=新螺纹(r);
t、 setDaemon(true);
返回t;
});

问题出在哪里?我希望机器人每隔30秒刷新一次状态(活动),每次刷新都会更改为不同的消息。(信息1,信息2)只需使用计时器?你能帮我怎么做吗?我应该在哪里给出信息2?我该怎么办?是否导入了
java.util.Timer
?是导入了import java.util.Timer;我忘了
TimerTask
。我的编辑工作做得好吗?