Estoy tratando de encontrar el UUID de un usuario en mi base de datos, pero devuelve un valor nulo sin ningún motivo. Está en el método connect(). Puedo encontrar esto manualmente y en mi proyecto en javaScript. Pero por alguna razón, recibo este error.
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; }Error:
[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 nullEn el método de connect , está declarando el campo MongoCollection<Document> users .
Si su IDE está bien configurado, debería decirle que este campo no se usa. Aquí, está creando un campo local (que se mantiene solo en el alcance del método) en lugar de configurar el campo global, que se declara justo debajo de la public final class DiscordLink .
Para solucionarlo, haz lo siguiente:
this.mongoDatabase = mongoClient.getDatabase("myFirstDatabase") this.users = this.mongoDatabase.getCollection("users"); Aquí, la palabra clave this es para decir que está buscando la variable global, declarada fuera del método.