【发布时间】:2019-12-22 05:49:09
【问题描述】:
我正在尝试根据用户可以设置的计时器来遍历列表。但是我在 TimerTask 可运行文件中找不到一个好方法。
可以在我在下面分享的代码中找到总体思路。 Announcements 是 List 的 List<String>。在每个间隔上,我都想从announcements 中获取下一个announcement 并显示其中的字符串。除了计时器超过多个announcements,我已经完成了所有工作:
timer.scheduleAtFixedRate(new TimerTask() {
int iterator = 0;
@Override
public void run() {
List<String> announcement = announcements.get(iterator);
for (String line : announcement) {
Bukkit.broadcastMessage(line);
}
iterator++;
if(iterator > announcements.size()){
iterator = 0;
}
}
}, 0, (int)config.get("interval")*1000);
使用我发布的代码,我得到一个IndexOutOfBoundsException,它甚至从未发布任何消息。如果我删除迭代器代码,它将无休止地显示第一个 announcement。
【问题讨论】:
-
你能描述一下你当前的实现到底出了什么问题吗?期望的行为是什么,当前的行为与此有何不同?您所说的“......除了计时器会检查多个公告”是什么意思?
-
对不起,如果我的问题有点不清楚,这是我第一次发帖,我真的不知道如何表达这些问题。幸运的是,其他人通过代码示例帮助了我。感谢您的评论 :)
-
这里需要注意的是,Timer 并不能很好地处理异常。尝试使用“ScheduledThreadPoolExecutor”更好地处理异常。
标签: java multithreading loops iterator runnable