Подтвердить что ты не робот

Com.sun.jdi.InvocationException произошел вызов метода

Я просто хочу создать объект класса, но получил эту ошибку при отладке. Может ли кто-нибудь сказать мне, в чем проблема? Местоположение этого кода находится в классе Spring (2.5) Service.

Существует аналогичная проблема: OJB Reference Descriptor 1: 0 отношение? Должен ли я установить auto-retrieve на false?

Большое спасибо ~

4b9b3361

Ответ 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.