Как мне работать с ClassNotLoadedException во время отладки?
Поэтому я (удаленно) отлаживаю приложение java / jboss в Eclipse, переходя по строкам. В какой-то момент массив объектов GridSquare
( GridSquare
– довольно простой, автономный class, содержит несколько свойств и методов) создается вызовом метода, то есть:
GridSquare[] squares = this.theGrid.getSquares(14, 18, 220, 222);
… В то время как когда я действительно выполняю код, массив squares
заполняется объектами GridSquare
, я получаю что-то странное при переходе через код и отладке. В точке останова на строке, непосредственно следующей за назначением, показанным выше, если я попытаюсь просмотреть массив squares
, вместо значения получаю следующее:
- Жасмин: обратный вызов Async не вызывался в течение таймаута, указанного jasmine.DEFAULT_TIMEOUT_INTERVAL
- Есть ли известная проблема, связанная с символами ядра Windows 7?
- Как перенаправить qDebug, qWarning, qCritical etc output?
- Удаленная отладка Java, как она работает технически?
- Как найти, где исключение было выбрано на C ++?
org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
… Кто-нибудь знает, что это значит?
- Расшифровка информации о переменной при отладке Java
- iphone - NSTimers в фоновом режиме
- Шаг в свойство / функцию (F11) не работает должным образом
- Как я могу отлаживать приложения в Java Web Start (JNLP)?
- Как вы отлаживаете classический ASP?
- Инструмент / метод анализа дампа streamа
- Отладка iframe с помощью инструментов разработчика Chrome
- Как получить вывод ассемблера из источника C / C ++ в gcc?
В основном это означает, что загрузчик classов не загрузил class GridSquare []. Говорят, что это похоже на ошибку в отладчике. Связь точки прерывания с кодом, по-видимому, немного нарушена. Либо вам нужно перекомпилировать, чтобы получить номера строк в синхронизации, либо какая-то другая проблема продолжается. В этот момент кода (после назначения) его необходимо загрузить. Если getSquares фактически возвращает подclass (GridSquareSubclass []), в этот момент JVM может не загрузить его, потому что он ему не нужен (пока).
Я столкнулся с этой ошибкой, потому что я выполнял единичный тест по коду, который использует reflection. Я сделал специальный class для тестирования всех функций кода. Junit явно использует отдельный загрузчик classов для тестовых classов (что имеет смысл), поэтому мой код не смог использовать reflection в этом classе. Трассировка стека, которую я получил, была чрезвычайно обобщенной (java.lang.InstantiationException), но когда я проверил режим отладки, было больше деталей самого объекта Exception (org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException) что привело меня к такому выводу.
Поэтому я переместил специальный class в основной загрузчик classов (перемещая файл из src / test / java в src / main / java), и он отлично работал. Мне не нравится это решение, но я не могу найти альтернативы. В моем случае это не имеет большого значения, но я вижу, как это может быть проблемой для других.
Я видел это в Eclipse, когда у вас есть переменные classа подclassа, скрывающие переменные родительского classа. Каким-то образом это путает Eclipse (и вообще это плохая идея). Например:
class A { private String a; } class B extends A { public String a; }
//Give a SIZE to the array: GridSquare[] squares = GridSquare[this.theGrid.size()]; //Fill each element of the array with the object constructor to avoid the null value for(int i=0; i
Инициализация GridSquare решит проблему. squares = new GridSquare ();
Я столкнулся с той же проблемой, я только что создал публичный статический основной метод void, создал объект того же типа и Run As java Application, затем удалил основной метод, теперь он отлично работает.