JDA#getGuilds() 方法返回一个空列表
Posted
技术标签:
【中文标题】JDA#getGuilds() 方法返回一个空列表【英文标题】:The JDA#getGuilds() method is returning an empty list 【发布时间】:2021-07-11 23:31:18 【问题描述】:所以我正在体验不和谐的 JDA api。我试图获取我的机器人的服务器,但它根本不起作用。
public static void main(String[] args)
JDABuilder jdab = JDABuilder.create("token",GatewayIntent.DIRECT_MESSAGES);
JDA jda = null;
try jda = jdab.build();
catch (LoginException e) e.printStackTrace();
assert jda != null;
System.out.println(jda.getGuilds().size());
for(Guild g : jda.getGuilds())
System.out.println(g.getName());
但实际上它只显示 0,这意味着 getGuilds() 方法的列表是空的。
任何帮助将不胜感激,并感谢任何回答
【问题讨论】:
【参考方案1】:JDABuilder#build 的文档指出:
登录进程在不同的线程中运行,所以虽然这会立即返回,但 JDA 尚未完成加载,因此许多 JDA 方法有机会返回错误信息。例如,JDA.getGuilds() 可能会返回一个空列表,或者 JDA.getUserById(long) 可能会为任意用户 ID 返回 null。
如果您希望确定 JDA 信息正确,请使用 JDA.awaitReady() 或注册一个 EventListener 来监听 ReadyEvent。
所以你要做的就是调用awaitReady()
来阻塞主线程,直到JDA 准备好。只有这样,您才能可靠地访问 JDA 缓存。
【讨论】:
以上是关于JDA#getGuilds() 方法返回一个空列表的主要内容,如果未能解决你的问题,请参考以下文章
getContactsFromFirebase() 方法返回一个空列表
Hibernate query.list() 方法返回空列表而不是空值