com.sun.jdi.InvocationException发生调用方法
我只是想创build一个类的对象,但debugging时得到这个错误。 有谁可以告诉我问题是什么? 这段代码的位置在一些Spring(2.5)服务类中。
还有一个类似的问题: OJB参考描述符1:0的关系? 我应该设置自动检索为false?
非常感谢〜
根本原因是在debuggingjavadebugging接口的时候会调用你的类的toString()在popup框中显示类信息,所以如果toString方法没有被正确的定义,可能会发生这种情况。
在Eclipse中debugging时也有类似的exception。 当我挖空一个对象时,popup框显示一个com.sun.jdi.InvocationException
消息。 我的根本原因不是我的类的toString()
方法,而是hashCode()
方法。 这导致了一个NullPointerException
,导致com.sun.jdi.InvocationException
在debugging过程中出现。 一旦我照顾了空指针,一切都按预期工作。
那可能是因为上面提到的其他几件事情。 在我的情况下,问题是一样的,但理由是另一回事。
在一个类(A)中,我有几个对象,一个对象是另一个类(B)和其他一些对象。 在这个过程中,B类中的一个对象(String)变为null,然后试图通过父类(A)访问该对象。
因此,控制台会抛出空点exception,但eclipsedebugging器将显示上述错误。
我希望你能留下来。
对于我来说,当toString被定义为这样的时候,抛出了同样的exception:
@Override public String toString() { return "ListElem [next=" + next + ", data=" + data + "]"; }
其中ListElem
是一个链表元素,我创build了一个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);
这有效地导致了无法打印的循环链表。 感谢指针。
所以我在这里有同样的问题。 发现我的域名实例正在从hibernate会话中分离出来。 我用isAttached()
来检查和附加域使用d.attach()
在我的情况下,在eclipsedebugging器中禁用variables窗口右上angular的“显示逻辑结构”button/图标解决了它。
元素不存在可能有两个原因:
- Bad xpath(// * [@ id'forgotQuote])
- 正确的xpath但没有元素(// * [contains(text(),'这个文本不在页面中')])
当你正在运行Debug时,你会得到com.sun.jdi.InvocationException,并且你的鼠标hover在WeBElement的引用上(这与Selenium和Java有关)?
我们使用以下内容,但不能区分由于错误的xpath或不存在的元素(有效的xpath语法)是否返回false:
public static boolean isElementDisplayed(WebElement element) { boolean isDisplayed = false; try { isDisplayed = element.isDisplayed(); } catch (NoSuchElementException e) { ;// No Worries } return isDisplayed; }
我曾经有过同样的问题。 在我的情况下,toString()方法被严重创build。 确切地说,当我的团队的开发人员被分配了代码清理任务,并将toString(),hashCode()代码和equals()方法尽可能添加到域对象时,toString方法中包含了静态最终variables。 但是在类中,因为过度查看它,所以他包含导致“com.sun.jdi.InvocationException”的最终静态variables,只有当我hover在具有exception的对象上时,才能在debugging中看到此exception。
这是我的情况
我有一个BO类的学生 ,它与另一个BO类课程 (他研究的课程) 进行了多对一的映射。
我希望将数据保存到另一个表中,该表具有Student和Classes的 外键 。 在某些情况下,我在某些条件下提供了一个学生 名单 ,每个学生都会有一个class级的参考。
示例代码: –
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); }
在这里,你可以看到,我设置学生和类的引用我想要保存的BO 。 但在debugging时,当我检查student.getClasses()
它显示这个exception( com.sun.jdi.InvocationException
)。
我发现的问题是,使用HQL查询获取学生列表后,我正在冲洗和closures 会话 。 当我删除session.close();
声明问题解决了。
当我最终将所有的数据保存到表( MarksCardSiNoGen )时,会话被closures。
希望这可以帮助。
删除hashCode()
和equals()
解决了我的问题。 在我的例子中,我使用了Apache的commons-lang哈希代码,并且等同于手动创build非静态类的构build器,所以编译器不会抛出任何exception。 但在运行时它引起了调用exception。
在我的情况下,这是由于对象引用变得陈旧。 我使用selenium webdriver自动化我的应用程序,所以我在文本框中键入内容,然后导航到另一个页面,所以当我回到上一页时,该对象变得陈旧。 所以这是导致exception,我处理它通过再次初始化元素 – PageFactory.initElements(驱动程序,Test.class;
在Eclipse中我得到了类似的exception。 这是由于java.lang.StackOverflowError
错误。 我在子类中有overrideIn toString()
方法,有JoinColumn
,它是使用父类的对象返回string,从而导致循环依赖。 尝试从toString()
删除该对象,它将工作。