Java 为什么JDA返回NullPointerException?

Java 为什么JDA返回NullPointerException?,java,discord,Java,Discord,我目前正在尝试使用getMemberById()方法,但它总是返回null,即使我给它特定的指令或我知道格式正确的特定ID也是如此 public void onGuildMessageReceived(GuildMessageReceivedEvent event) { Member member = event.getGuild().getMemberById("500364917736734734"); } 我知道这个ID是有效的,因为当我使用布尔值来检

我目前正在尝试使用
getMemberById()
方法,但它总是返回null,即使我给它特定的指令或我知道格式正确的特定ID也是如此

public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        Member member = event.getGuild().getMemberById("500364917736734734");
}
我知道这个ID是有效的,因为当我使用布尔值来检测一个用户的ID是否等于这个特定的ID时,它返回为非null。它给我
true
,当它是


非常感谢您的帮助

很可能您正在调用
getMemberById(String)
,而ID应该作为
long
输入
getMemberById(long)
。考虑到您可能希望获取触发此事件的
成员
,如果是这种情况,您应该使用
GuildMessageReceivedEvent.getMember()

您可以改为使用:

public void OnBuilderMessageReceived(GuildMessageReceivedEvent事件){
event.getGuild().retrieveMemberById(“500364917736734734”)。队列(成员->{
...
});
}

这是必需的,因为在调用
getMemberById
时可能不会缓存成员。默认情况下,JDA不会在启动时将所有成员加载到缓存中。为此,有许多方法可用于动态加载成员。这在.

中有进一步的解释,我想到了这一点,所以我尝试使用
long
值来代替,同样的事情发生了。当它被执行时,我得到了一个
NullPointerException
。它可以输入为
字符串
值,我检查了文档。另外,我不想获取事件触发的成员,这只是一个示例,我不明白为什么它会给我一个null异常。谢谢你还确认你试图获取的用户与该事件触发的用户在同一个帮会中吗?让该用户在不同的公会中也可以解释空返回。是的,我特别从该公会得到了他。阅读,此方法仅返回缓存的用户。如果使用了“错误的”
MemberCachePolicy
,则此用户可能未被缓存,从而使方法返回null。看起来是这样的。阅读以获取有关缓存的更多信息,以及要调用哪个方法来设置缓存。啊,这很有意义!谢谢,巴德,这很有效。