Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите getInstance is Null

ILEZOV

Активный участник
Пользователь
Баллы
66
Здравствуйте! При запуске плагина выводит ошибку:
Код:
 Could not load 'plugins\CoalEssentials.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException: Cannot invoke "mc.coalessentials.ru.coalessentials.CoalEssentials.getLogger()" because the return value of "mc.coalessentials.ru.coalessentials.CoalEssentials.getInstance()" is null
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:157) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:414) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:322) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.craftbukkit.v1_16_R3.CraftServer.loadPlugins(CraftServer.java:393) ~[patched_1.16.5.jar:git-Purpur-1171]
        at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:279) ~[patched_1.16.5.jar:git-Purpur-1171]
        at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1074) ~[patched_1.16.5.jar:git-Purpur-1171]
        at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Purpur-1171]
        at java.lang.Thread.run(Thread.java:1623) [?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "mc.coalessentials.ru.coalessentials.CoalEssentials.getLogger()" because the return value of "mc.coalessentials.ru.coalessentials.CoalEssentials.getInstance()" is null
        at mc.coalessentials.ru.coalessentials.database.SQLConnection.<init>(SQLConnection.java:14) ~[?:?]
        at mc.coalessentials.ru.coalessentials.CoalEssentials.<init>(CoalEssentials.java:23) ~[?:?]
        at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67) ~[?:?]
        at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?]
        at java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) ~[?:?]
        at jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:304) ~[?:?]
        at java.lang.Class.newInstance(Class.java:685) ~[?:?]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:94) ~[patched_1.16.5.jar:git-Purpur-1171]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:153) ~[patched_1.16.5.jar:git-Purpur-1171]
        ... 7 more

Главный класс:

Код:
package mc.coalessentials.ru.coalessentials;

import mc.coalessentials.ru.coalessentials.commands.FlyCommand;
import mc.coalessentials.ru.coalessentials.database.SQLConnection;
import mc.coalessentials.ru.coalessentials.events.PlayerJoinEvent;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects;
import java.util.logging.Logger;

public final class CoalEssentials extends JavaPlugin {

    private static CoalEssentials instance;
    private final PluginManager pluginManager = getServer().getPluginManager();
    private final Logger logger = getLogger();
    final SQLConnection sql = new SQLConnection();
    Connection database = null;

    @Override
    public void onEnable() {
        this.saveDefaultConfig();
        instance = this;

        logger.info("CoalEssentials запущен");
        logger.info("Разработчик ILeZzoV");
        logger.info("Идет подключение ку MySQL");

        database = sql.Connect();

        Objects.requireNonNull(getCommand("fly")).setExecutor(new FlyCommand());

        pluginManager.registerEvents(new PlayerJoinEvent(), this);

    }

    @Override
    public void onDisable() {
        logger.info("CoalEssentials выключен");
    }

    public static CoalEssentials getInstance() {
        return instance;
    }

    public void send_message(CommandSender player, String message){
        player.sendMessage(ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(getInstance().getConfig().getString("prefix"))) + ChatColor.translateAlternateColorCodes('&', Objects.requireNonNull(getInstance().getConfig().getString(message))));
    }
    public Connection getDatabase(){
        return database;
    }
    public Statement getStatement() throws SQLException {
        return getDatabase().createStatement();
    }
    public void insertSQL (Player player) throws SQLException{
        getStatement().execute("INSERT INTO CoalEssentials VALUES (" + player.getName() + "," + player.getUniqueId().toString() + "," + player.getAllowFlight() + "," + false + ")");
        getDatabase().commit();
    }
}

Класс с ошибкой:

Код:
package mc.coalessentials.ru.coalessentials.database;

import mc.coalessentials.ru.coalessentials.CoalEssentials;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Objects;
import java.util.logging.Logger;

public class SQLConnection {
    Logger logger = CoalEssentials.getInstance().getLogger();
    FileConfiguration config = CoalEssentials.getInstance().getConfig();
    public Connection Connect() {
        final String host = config.getString("mysql.host");
        final String port = config.getString("mysql.port");
        final String password = config.getString("mysql.password");
        final String user = config.getString("mysql.user");
        final String database = config.getString("mysql.database");
        final String url = "jdbc:mysql://" + host + ":" + port + "/" + database + "?useSSL=false&amp;serverTimezone=UTC";
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, user, password);
            connection.commit();
            logger.info("Соединение с дата-базой установлено");
            Statement statement = connection.createStatement();
            statement.execute("CREATE TABLE IF NOT EXISTS CoalEssentials (name TEXT, uuid TEXT, flymode BOOL, godmode BOOL)");
            connection.commit();
        } catch (SQLException e) {
            Bukkit.getPluginManager().disablePlugin(Objects.requireNonNull(CoalEssentials.getInstance().getServer().getPluginManager().getPlugin("CoalEssentials")));
            logger.info("Возникла ошибка при подключении к дата-базе: " + e);
        }
        return connection;
    }
}

Помогите пожалуйста
 
Конструктор класса CoalEssentials вызывается раньше onEnable(). Когда ты пишешь "final SQLConnection sql = new SQLConnection();" - объект SQLConnection создается раньше вызова onEnable(), где ты инициализируешь instance.
1 вариант: Прописать "sql = new SQLConnection()" после "instance = this"
2 вариант: Обращаться к "CoalEssentials.getInstance()" из метода Connect()
 

Поделиться этой страницей

Назад
Верх