Com.sun.jdi.InvocationException произошел вызов метода
Я просто хочу создать объект класса, но получил эту ошибку при отладке. Может ли кто-нибудь сказать мне, в чем проблема? Местоположение этого кода находится в классе Spring (2.5) Service.
Существует аналогичная проблема: OJB Reference Descriptor 1: 0 отношение? Должен ли я установить auto-retrieve на false?
Большое спасибо ~
Ответы
Ответ 1
Основная причина заключается в том, что при отладке интерфейса отладки java вызовет toString() вашего класса, чтобы отобразить информацию о классе во всплывающем окне, поэтому, если метод toString не определен правильно, это может произойти.
Ответ 2
У меня также было подобное исключение при отладке в Eclipse. Когда я обманул объект, всплывающее окно отобразило сообщение com.sun.jdi.InvocationException
. Коренной причиной для меня был не метод toString()
моего класса, а метод hashCode()
. Это вызывало NullPointerException
, что вызвало появление com.sun.jdi.InvocationException
во время отладки. Как только я позаботился о нулевом указателе, все работало, как ожидалось.
Ответ 3
Ну, это может быть из-за нескольких вещей, упомянутых другими до и после. В моем случае проблема была та же, но причина была в другом.
В классе (A) у меня было несколько объектов, и один из объектов был другим классом (B) с некоторыми другими объектами. Во время процесса один из объектов (String) из класса B был нулевым, а затем я попытался получить доступ к этому объекту через родительский класс (A).
Таким образом, консоль выдаст исключение нулевой точки, но отладчик eclipse покажет вышеупомянутую ошибку.
Я надеюсь, что вы можете сделать все остальное.
Ответ 4
Для меня такое же исключение было выбрано, когда toString было определено как таковое:
@Override
public String toString() {
return "ListElem [next=" + next + ", data=" + data + "]";
}
Где ListElem
- связанный элемент списка, и я создал ListElem
как таковой:
private ListElem<Integer> cyclicLinkedList = new ListElem<>(3);
ListElem<Integer> cyclicObj = new ListElem<>(4);
...
cyclicLinkedList.setNext(new ListElem<Integer>(2)).setNext(cyclicObj)
.setNext(new ListElem<Integer>(6)).setNext(new ListElem<Integer>(2)).setNext(cyclicObj);
Это фактически вызвало циклический связанный список, который нельзя распечатать. Спасибо за указатель.
Ответ 5
У меня была одна и та же проблема. В моем случае метод toString() был плохо создан. Если быть точным, статическая конечная переменная была включена в метод toString, когда разработчику моей команды была назначена задача очистки кода и добавить код toString(), hashCode() и equals() для объектов домена, где это возможно. но из классов из-за того, что он смотрел на него, он включил окончательную статическую переменную, которая вызвала "com.sun.jdi.InvocationException", это исключение было видимым при отладке только тогда, когда я зависал над объектом, у которого есть исключение.
Ответ 6
поэтому у меня была такая же проблема. Выяснилось, что мой экземпляр домена был отделен от сеанса спящего режима. Я использовал isAttached()
для проверки и присоединения домена с помощью d.attach()
Ответ 7
Отключение кнопки "Показать логическую структуру" /значок верхнего правого угла окна переменных в отладчике eclipse разрешило это в моем случае.
Ответ 8
Это был мой случай
У меня был ученик по сущности, у которого были отношения многие-к-одному с классами сущностей (те классы, которые он изучал).
Я хотел сохранить данные в другую таблицу, в которой были внешние ключи учеников и классов. В какой-то момент выполнения я приводил список студентов при определенных условиях, и у каждого студента будет ссылка на класс классов.
Образец кода :-
Iterator<Student> itr = studentId.iterator();
while (itr.hasNext())
{
Student student = (Student) itr.next();
MarksCardSiNoGen bo = new MarksCardSiNoGen();
bo.setStudentId(student);
Classes classBo = student.getClasses();
bo.setClassId(classBo);
}
Здесь вы можете видеть, что я устанавливаю ссылку на ученика и классы на БО, который я хочу сохранить. Но во время отладки, когда я проверял student.getClasses()
он показывал это исключение (com.sun.jdi.InvocationException
).
Проблема, которую я обнаружил, заключалась в том, что после извлечения списка учеников с помощью HQL- запроса я сбрасывал и закрывал сеанс. Когда я удалил эту session.close();
С выражением проблема была решена.
Сессия была закрыта, когда я наконец сохранил все данные в таблицу (MarksCardSiNoGen).
Надеюсь это поможет.
Ответ 9
Могут быть две причины, по которым элемент не существует:
- Bad xpath (//* [@id'forgotQuote])
- Исправить xpath, но нет элемента (//* [содержит (текст(), "Этот текст отсутствует на странице" )])
Вы получили бы com.sun.jdi.InvocationException в любом случае, когда вы используете Debug, и вы наведите указатель мыши на ссылку на WeBElement (это с Selenium и Java)???
Мы используем следующее, но не можем отличить, возвращает ли он false из-за плохого xpath или несуществующего элемента (допустимый синтаксис xpath):
public static boolean isElementDisplayed(WebElement element) {
boolean isDisplayed = false;
try {
isDisplayed = element.isDisplayed();
} catch (NoSuchElementException e) {
;// No Worries
}
return isDisplayed;
}
Ответ 10
В Eclipse я получил аналогичное исключение. Это произошло из-за ошибки java.lang.StackOverflowError
. В классе child я переопределил метод toString()
, имея JoinColumn
, который возвращал строку с использованием объекта родительского класса, что приводило к циклической зависимости. Попробуйте удалить этот объект из toString()
, и он будет работать.
Ответ 11
Я получил com.sun.jdi.InvocationException occurred invoking method
когда я лениво загружал поле сущности, которое использовало вторичную конфигурацию базы данных (Spring Boot с 2 конфигами базы данных - отложенная загрузка со второй конфигурацией не работает). Временным решением было добавить FetchType.EAGER
.
Ответ 12
Удаление hashCode()
и equals()
решило мою проблему. В моем случае я использовал хэш-код Apache commons-lang и равным строителям для создания нестатических классов вручную, поэтому компилятор не выдавал никаких исключений. Но во время выполнения это вызвало исключение вызова.
Ответ 13
В моем случае это связано с тем, что ссылка на объект устарела.
Я автоматизировал свое приложение с помощью selenium webdriver, поэтому я ввожу что-то в текстовое поле, а затем переводит его на другую страницу, поэтому, пока я возвращаюсь на предыдущую страницу, этот объект становится устаревшим.
Так что это вызывало исключение, я обработал его, снова инициализируя элементы -
PageFactory.initElements(драйвер, Test.class;
Ответ 14
Я столкнулся с той же проблемой, потому что использовал аннотацию Lombok @Data, которая создавала методы toString и hashcode в файлах классов, поэтому я удалил аннотацию @Data и использовал специальную аннотацию @Gettter @Setter, которая исправила мою проблему.
мы должны использовать @Data только тогда, когда нам нужны все @ToString, @EqualsAndHashCode, @Getter для всех полей и @Setter для всех неконечных полей, а также @RequiredArgsConstructor.
Ответ 15
Я тоже столкнулся с той же проблемой. В моем случае я использовал java.util.UnknownFormatConversionException
. Я понял это только после вызова вызова printStackTrace
. Я решил это, изменив мой код, как показано ниже.
от:
StringBuilder sb = new StringBuilder();
sb.append("***** Test Details *****\n");
String.format("[Test: %1]", sb.toString());
чтобы:
String.format("[Test: %s]", sb.toString());
Ответ 16
Однажды я столкнулся с той же проблемой. В моем случае это было из-за переопределенного метода equals
. Одно значение приближалось к null
.