Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Очередной Null

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Доброго времени суток, форумчане (всех с нг). Я опять где то накосячил

    Пытаюсь припилить нормальную локализацию.

    есть некий enum - список фраз и дефолт значение.

    метод юзаю такой
    Код:
    private Phrases(String def){
            if (Lang.useDefault){
                PhraseStr = def;
            }else {
                Bukkit.getConsoleSender().sendMessage(this.toString());
                if (Lang.lang == null){
                    Bukkit.getConsoleSender().sendMessage("Null at lang"); // методом этих [s]сраных[/s] проверок выясняется что null именно тут
                }
                PhraseStr=Lang.lang.getString(this.toString());
            }
        }
    В классе Lang это объявлено так:
    Код:
    public static YamlConfiguration lang;
        public static boolean useDefault = false;
      
        public static void setLanguage(YamlConfiguration langconfig){
            lang = langconfig;
        }
        public static void setDefault(boolean b){
            useDefault = b;
        }
    И в главном классе в onEnable() это выглядит так

    Код:
    File corlang = new File(plugin.getDataFolder() + File.separator + "lang" + File.separator + plugin.getConfig().getString("lang") + ".yml");
            if (!corlang.exists()) {
                Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Can't find lang file " + ChatColor.GOLD + corlang.getName());
                Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Using default lang file");
                corlang = new File(plugin.getDataFolder() + File.separator + "lang" + File.separator + "en_US" + ".yml");
            }
            if (isCurrentLangFile(corlang)){
                Lang.setLanguage(YamlConfiguration.loadConfiguration(corlang));
                Lang.setDefault(false);
            }
    Файл не null, тут получается что даже метод проверки на валидность пашет.
    А поле lang вылезает в нулл, хотя булен спокойно устанавливается.

    P.S Да я тот человек, который кодит в восемь(да не мск) утра первого января, т.к. мне в кайф
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Не работает, в этом случае нулл 100% (он и есть) ибо разные экземпляры lang.

    И так то почему null будет, я тупо закидываю поля в lang а потом беру их значение. boolean переменная же не нул, она спокойно работает
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Lang lang = new Lang();
    lang.setLanguage(YamlConfiguration.loadConfiguration(corlang));
    lang.setDefault(false);

    Код:
    private Phrases(String def){
            if (lang.useDefault){
                PhraseStr = def;
            }else {
                Bukkit.getConsoleSender().sendMessage(this.toString());
                if (lang.lang == null){
                    Bukkit.getConsoleSender().sendMessage("Null at lang"); // методом этих [s]сраных[/s] проверок выясняется что null именно тут
                }
                PhraseStr=Lang.lang.getString(this.toString());
            }
        }
     
  5. Автор темы
    Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    я уже сделал, естественно там был нул поскольку взять тот файл конфига не представляется возможным, ибо это другие классы, а передавать его в каждый класс это тупо
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    А с чего ей быть нулл? У boolean 2 состояния, фалс или труе.
     
  7. Автор темы
    Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    а, ну да я же ее инициализирую
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Да в любом случае булев имеет только 2 состояния, 3тьего недано.
     
  9. Автор темы
    Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    кажись разобрался, тут логическая ловушка.

    isCurrentLangFile(corlang);
    Этот метод опирается на getKeys, containsAll (Phrases) , и выполняется ДО установки lang, а фразы обращаются к lang, который еще не установлен

    починил отдельным воидом, нулл отъехал.

    Спасибо
     

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