1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите getInstance is Null

Тема в разделе "Разработка плагинов для новичков", создана пользователем ILEZOV, 1 сен 2023.

  1. Автор темы
    ILEZOV

    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;
        }
    }
    
    Помогите пожалуйста
     
  2. MrAlexeiMK

    MrAlexeiMK Активный участник Пользователь

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

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