我只是想创建一个类的对象,但在调试时遇到了这个错误。谁能告诉我这是什么问题?此代码的位置在一些Spring(2.5)Service类中。
存在类似的问题:OJB Reference Descriptor 1:0 relationship? Should I set auto-retrieve to false?
非常感谢〜
答案 0 :(得分:81)
根本原因是,在调试java调试接口时,将调用类的toString()以在弹出框中显示类信息,因此如果未正确定义toString方法,则可能会发生这种情况。
答案 1 :(得分:27)
在Eclipse中调试时,我也有类似的异常。当我对一个对象进行鼠标悬停时,弹出框显示com.sun.jdi.InvocationException
消息。我的根本原因不是我班级的toString()
方法,而是hashCode()
方法。它导致NullPointerException
,导致在调试期间出现com.sun.jdi.InvocationException
。一旦我处理了空指针,一切都按预期工作。
答案 2 :(得分:12)
嗯,这可能是因为其他人之前和之后提到的一些事情。在我的情况下,问题是相同的,但原因是其他的。
在类(A)中,我有几个对象,一个对象是另一个类(B)和其他一些对象。在此过程中,B类中的一个对象(String)为null,然后我尝试通过父类(A)访问该对象。
因此,控制台将抛出 null point exception ,但eclipse调试器将显示上述错误。
我希望你能做剩下的事。
答案 3 :(得分:5)
对于我来说,当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);
这有效地导致了无法打印的循环链表。谢谢你的指针。
答案 4 :(得分:3)
我曾经遇到过同样的问题。在我的情况下,toString()方法被严重创建。准确地说,当我的团队的开发人员被分配了代码清理任务并且尽可能地将toString(),hashCode()代码和equals()方法添加到域对象时,toString方法中包含了静态最终变量。但由于过度关注它,他包括了最终的静态变量,导致了##; com.sun.jdi.InvocationException&#34;只有在我悬停在具有异常的对象上时,才会在调试时看到此异常。
答案 5 :(得分:2)
所以我在这里遇到了同样的问题。发现我的域实例与hibernate会话分离了。我使用isAttached()
使用d.attach()
答案 6 :(得分:1)
在我的情况下,禁用eclipse调试器中变量窗口右上角的“显示逻辑结构”按钮/图标解决了它。
答案 7 :(得分:1)
元素不存在可能有两个原因:
在运行Debug并将鼠标悬停在对WeBElement的引用(使用Selenium和Java)上时,是否会得到com.sun.jdi.InvocationException ??? < / p>
我们使用以下内容,但无法区分是否由于错误的xpath或不存在的元素(有效的xpath语法)而返回false:
public static boolean isElementDisplayed(WebElement element) {
boolean isDisplayed = false;
try {
isDisplayed = element.isDisplayed();
} catch (NoSuchElementException e) {
;// No Worries
}
return isDisplayed;
}
答案 8 :(得分:1)
这是我的案例
我有一个 BO 类的学生,其多对一映射到另一个 BO class 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);
}
在这里你可以看到,我设置了学生和 Classes 对我要保存的 BO 的引用。但是在我检查student.getClasses()
时进行调试时,它显示了此异常(com.sun.jdi.InvocationException
)。
我发现的问题是,在使用 HQL 查询获取学生列表后,我正在刷新并且正在关闭 会话。当我删除session.close();
语句时,问题就解决了。
当我最终将所有数据保存到表格中时,会话结束了( MarksCardSiNoGen )。
希望这有帮助。
答案 9 :(得分:1)
我在Eclipse中遇到了类似的异常。这是由于java.lang.StackOverflowError
错误造成的。我在子类中覆盖toString()
方法,使用JoinColumn
,它使用parentclass的对象返回字符串,从而产生循环依赖。尝试从toString()
中删除该对象,它会起作用。
答案 10 :(得分:0)
删除hashCode()
和equals()
解决了我的问题。在我的例子中,我使用Apache的commons-lang哈希代码和等于构建器来手动创建非静态类,因此编译器没有抛出任何异常。但是在运行时它导致了调用异常。
答案 11 :(得分:0)
在我的情况下,这是由于对象引用变得陈旧。 我使用selenium webdriver自动化我的应用程序,所以我在文本框中键入内容然后导航到另一个页面,所以当我回到上一页时,该对象变得陈旧。 所以这导致了异常,我通过再次初始化元素来处理它 - PageFactory.initElements(driver,Test.class;
答案 12 :(得分:0)
当我使用辅助数据库配置(Spring Boot with 2 database configs - lazy loading with second config does not work)延迟加载实体字段时,我收到了com.sun.jdi.InvocationException occurred invoking method
。临时解决方案是添加FetchType.EAGER
。
答案 13 :(得分:0)
我遇到了同样的问题,因为我使用的是在类文件中创建toString和哈希码方法的Lombok @Data批注,因此我删除了@Data批注并使用了特定的@Gettter @Setter批注来解决我的问题。
仅当在所有字段上都需要所有@ ToString,@ EqualsAndHashCode,@ Getter和在所有非最终字段上都使用@Setter以及@RequiredArgsConstructor时,才应使用@Data。
答案 14 :(得分:0)
我也面临着同样的问题。就我而言,我碰到了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());
答案 15 :(得分:-1)
我曾遇到过同样的问题。在我的情况下,这是因为被覆盖的equals
方法。一个值即将到来null
。