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

Стала возникать ошибка java.lang.ClassNotFoundException

Тема в разделе "Разработка плагинов для новичков", создана пользователем NeMaster, 3 фев 2022.

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

    NeMaster Новичок Пользователь

    Баллы:
    21
    Небыло печали. Раньше эта ошибка не возникала, но последнее время стала преследовать.

    Возникает каждый раз в разных и неожиданных местах, и причины мне пока не ясны.
    Кто нибудь знает от куда это и как этой ошибки избежать?
     
  2. Sturm_PT

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

    Баллы:
    76
    Класс не найден
    Если нужны подробности, давай код и лог ошибки
     
  3. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    К примеру
    Есть класс Db путь к файлу crypto/db/Db.class
    Код:
    package crypto.db;
    
    public class Db {
        [skiped]
        public Region getRegion(Connection conn, int x, int y, int z) {
           Connection connection = conn == null ? this.connection : conn;
            try (PreparedStatement statement = connection.prepareStatement(
                    "SELECT * FROM regions WHERE x1 <= ? and x2 >= ? and y1 <= ? and y2 >= ? and z1 <= ? and z2 >= ?")) {
                statement.setInt(1, x);
                statement.setInt(2, x);
                statement.setInt(3, y);
                statement.setInt(4, y);
                statement.setInt(5, z);
                statement.setInt(6, z);
                //System.out.println(statement.toString());
                ResultSet resultSet = statement.executeQuery();
    
                if(resultSet.next()) {
                   Region region = new Region();
                   region.name = resultSet.getString("name");
                   region.player = resultSet.getString("player");
                   region.payedTo = resultSet.getLong("payedto");
                   region.x1 = resultSet.getInt("x1");
                   region.x2 = resultSet.getInt("x2");
                   region.y1 = resultSet.getInt("y1");
                   region.y2 = resultSet.getInt("y2");
                   region.z1 = resultSet.getInt("z1");
                   region.z2 = resultSet.getInt("z2");
                   region.isQuest = resultSet.getBoolean("quest");
                    return region;
                }
                return null;
            } catch (SQLException e) {
                e.printStackTrace();
                return null;
            }
        }
        [skiped]
    
    В этой же папке лежит файл Region.class
    Код:
    package crypto.db;
    
    import java.math.BigDecimal;
    
    public class Region {
        public String name;
        public String player;
        public int x1;
        public int x2;
        public int y1;
        public int y2;
        public int z1;
        public int z2;
        public long payedTo;
        public boolean isQuest;
    }
    ошибка возникает на строке
    Region region = new Region();
    Локально ошибка не происходит, на сервере происходит.
    Есть другие аналогичные классы так же сделаны и так же используются и нет ошибки.
    И этот код уже успешно работал, но в какой то момент, после очередной сборки перестал работать.

    Лог:
    Код:
            [skiped]
            at java.lang.Thread.run(Thread.java:833) [?:?]
    Caused by: java.lang.NoClassDefFoundError: crypto/db/Region
            at crypto.db.Db.getRegion(Db.java:306) ~[?:?]
            at crypto.Main.onPlayerInteract(Main.java:675) ~[?:?]
            at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
            at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
            at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
            at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
            ... 22 more
    Caused by: java.lang.ClassNotFoundException: crypto.db.Region
            at org.bukkit.plugin.java.PluginClassLoader.loadClass0(PluginClassLoader.java:147) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
            at org.bukkit.plugin.java.PluginClassLoader.loadClass(PluginClassLoader.java:99) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
            at crypto.db.Db.getRegion(Db.java:306) ~[?:?]
            at crypto.Main.onPlayerInteract(Main.java:675) ~[?:?]
            at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
            at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
            at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
            at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-api-1.18.1-R0.1-SNAPSHOT.jar:?]
            ... 22 more
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    ClassNotFoundException вызывается при отсутствии класса. Чего непонятного то?
     
  5. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    1) Открой плагин на сервере архиватором и убедись, что все классы там действительно есть
    2) Почисти кэши в среде разработки, скомпилируй проект ещё раз, залей на сервер и проверь
    3) Во избежание казусов при тестировании не используй /reload, PlugMan и прочие перезагрузки. Исключительно /stop или /restart
    4) Если все предыдущее не поможет - переустанови джаву на сервере
     
  6. Автор темы
    NeMaster

    NeMaster Новичок Пользователь

    Баллы:
    21
    Ну как бы сказать, ошибка относительно понятна. Мне не понятно происхождение.
    Если проект собирается maven'ом достаточно ли будет удалять папку сборки target?
    Но вообще сейчас поэксперементирую.
     
  7. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Зачем удалять-то? Просто
    maven clean
    Но опять же зачем...
    При сборке старые файлы должны заменяться на новые.

    Перед возникновением проблем не переименовывал классы или пакеты? Может менял регистр букв (больше/маленькие)?
     

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