我试图在数据库中查找用户的 UUID,但它无缘无故地返回 null。它在 connect() 方法中。我可以手动找到它,并在我的 javaScript 项目中找到它。但由于某种原因,我收到了此错误。
public final class DiscordLink extends JavaPlugin implements Listener {
public MongoCollection<Document> users;
public MongoDatabase mongoDatabase;
@Override
public void onEnable() {
System.setProperty("DEBUG.GO", "true");
System.setProperty("DB.TRACE", "true");
Logger mongoLogger = Logger.getLogger("org.mongodb.driver");
mongoLogger.setLevel(Level.WARNING);
connect();
getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[DiscordLink] Plugin enabled...");
getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
getServer().getConsoleSender().sendMessage(ChatColor.RED + "[DiscordLink] Plugin disabled...");
}
public void connect() {
MongoClient mongoClient = MongoClients.create("MONGOURI");
MongoDatabase mongoDatabase = mongoClient.getDatabase("myFirstDatabase");
MongoCollection<Document> users = mongoDatabase.getCollection("users");
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[DiscordLink] Connected to database!");
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
Document document = users.find(Filters.eq("mcUUID", player.getUniqueId().toString())).first();
if(document != null) {
player.kickPlayer(ChatColor.RED + "Discord Authentication Failed!");
} else { return; }
错误:
[15:43:01 ERROR]: Could not pass event PlayerJoinEvent to DiscordLink v1.0-SNAPSHOT
java.lang.NullPointerException: Cannot invoke "com.mongodb.client.MongoCollection.find(org.bson.conversions.Bson)" because "this.users" is null
最佳答案
在 connect
方法,您正在声明字段 MongoCollection<Document> users
.
如果你的IDE配置良好,它应该告诉你这个字段没有被使用。在这里,您将创建一个本地字段(仅保留在方法范围内),而不是设置全局字段,该字段在public final class DiscordLink
下面声明。 .
要修复它,请执行以下操作:
this.mongoDatabase = mongoClient.getDatabase("myFirstDatabase")
this.users = this.mongoDatabase.getCollection("users");
这里,this
关键字是说您正在寻找在方法外部声明的全局变量。
关于java - 即使数据存在,我的 MongoDB .find() 方法也返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70688162/