com.sun.jdi.InvocationException произошел вызов метода - PullRequest
67 голосов
/ 08 ноября 2010

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

Есть похожая проблема: OJB Reference Descriptor 1: 0 отношениеДолжен ли я установить автоматический поиск на false?

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

Ответы [ 16 ]

82 голосов
/ 28 июня 2012

Основная причина заключается в том, что при отладке интерфейс отладки java будет вызывать toString () вашего класса для отображения информации о классе во всплывающем окне, поэтому, если метод toString не определен правильно, это может произойти.

27 голосов
/ 04 июля 2013

У меня также было похожее исключение при отладке в Eclipse. Когда я поместил объект поверх объекта, во всплывающем окне отобразилось сообщение com.sun.jdi.InvocationException. Основной причиной для меня был не метод toString() моего класса, а метод hashCode(). Это вызывало NullPointerException, что приводило к появлению com.sun.jdi.InvocationException во время отладки. Как только я позаботился о нулевом указателе, все заработало как положено.

12 голосов
/ 12 сентября 2014

Ну, это может быть из-за нескольких вещей, упомянутых другими до и после. В моем случае проблема была та же, но причина была в другом.

В классе (A) у меня было несколько объектов, и один из объектов был другим классом (B) с некоторыми другими объектами. Во время этого процесса один из объектов (String) из класса B был нулевым, а затем я попытался получить доступ к этому объекту через родительский класс (A).

Таким образом, консоль выдаст исключение нулевой точки , но отладчик eclipse покажет вышеупомянутую ошибку.

Я надеюсь, что вы можете сделать остальное.

5 голосов
/ 10 апреля 2014

Для меня было выдвинуто то же исключение, когда 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);

Это фактически вызвало циклический связанный список, который не может быть напечатан.Спасибо за указатель.

3 голосов
/ 25 июня 2015

Однажды у меня была такая же проблема. В моем случае метод toString () был плохо создан. Чтобы быть точным, статическая конечная переменная была включена в метод toString, когда моей команде-разработчику было поручено выполнить задачу очистки кода, а также добавлять методы toString (), hashCode () и equals () в доменные объекты, где это возможно. но в классы из-за того, что он смотрел на него, он включил финальную статическую переменную, которая вызвала «com.sun.jdi.InvocationException», это исключение было видно при отладке, только когда я завис над объектом, который имеет исключение.

2 голосов
/ 01 декабря 2016

Это был мой случай

У меня была сущность Студент , которая имела отношение многие-к-одному с другой сущностью Классы (классы, которые он изучал).

Я хотел сохранить данные в другую таблицу, в которой были внешние ключи обоих Student и Classes . В какой-то момент казни я приносил Список из Студентов при некоторых условиях, и каждый Студент будет иметь ссылку Классы учебный класс.

Пример кода: -

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 и Classes ссылку на BO , который я хочу сохранить. Но во время отладки, когда я проверял student.getClasses(), показывалось это исключение (com.sun.jdi.InvocationException).

Проблема, которую я обнаружил, заключалась в том, что после извлечения списка Student с использованием запроса HQL я сбрасывал и закрывал сессия . Когда я удалил это session.close(); заявление, проблема была решена.

Сессия была закрыта, когда я наконец сохранил все данные в таблицу ( MarksCardSiNoGen ).

Надеюсь, это поможет.

2 голосов
/ 04 декабря 2013

Отключение кнопки / значка «Показать логическую структуру» в верхнем правом углу окна переменных в отладчике eclipse разрешило ее, в моем случае.

2 голосов
/ 27 сентября 2013

поэтому у меня была такая же проблема. Обнаружил, что мой экземпляр домена отключался от сеанса гибернации. Я использовал isAttached() для проверки и прикрепил домен, используя d.attach()

1 голос
/ 24 января 2018

Я получил com.sun.jdi.InvocationException occurred invoking method, когда я лениво загружал поле сущности, которое использовало вторичную конфигурацию базы данных ( Spring Boot с 2 конфигами базы данных - отложенная загрузка со второй конфигурацией не работает ).Временным решением было добавить FetchType.EAGER.

1 голос
/ 06 июня 2017

Я получил похожее исключение в Eclipse. Это было связано с ошибкой java.lang.StackOverflowError. Я переопределил метод toString() в дочернем классе, имеющий JoinColumn, который возвращал строку, используя объект родительского класса, что приводило к круговой зависимости. Попробуйте удалить этот объект из toString(), и он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...