У меня есть метод ниже класса A. Все классы A, B, C и основной класс, из которых вызывается «A», находятся в одной и той же банке.Как решить java.lang.NoClassDefFoundError, происходящий в одной и той же банке?
public class A {
private static void init() {
if (!init) {
synchronized (B.class) {
if (!init) {
map = C.creat();
init = true;
}
}
}
}
}
Код бросает Throwable
, java.lang.NoClassDefFoundError
на synchronized
блок (линия № 4). Что может быть причиной, поскольку все классы находятся в одном банке, нет возможности не найти класс во время выполнения.
Я пропустил решение в Existing Question, но не смог найти решение. Пожалуйста помоги.
Есть статические блоки инициализации и статические переменные в классе B.
Проблема может быть фиксированными, если я использую static object/class A
Синхронизировать фрагмент кода вместо «B». Мне любопытно узнать, почему я столкнулся с исключением и как исправить это, используя только класс B.
Почему вы используете B.class для синхронизации? Я не думаю, что это лучшая практика. – duffymo
Может ли быть, что статические блоки в B вызывают метод 'A.init'? – RealSkeptic
Можете ли вы показать структуру упаковки банки?Вы можете jd-gui декомпилировать – Optimus