2010-11-08 83 views
54

我只想創建一個類的對象,但調試時出現此錯誤。有人可以告訴我問題是什麼嗎?這段代碼的位置在一些Spring(2.5)服務類中。com.sun.jdi.InvocationException發生調用方法

有一個類似的問題:OJB Reference Descriptor 1:0 relationship? Should I set auto-retrieve to false?

非常感謝〜

+3

在沒有任何源代碼或堆棧跟蹤的情況下,很難猜測出問題所在。 – 2010-11-08 15:37:30

+8

我想通了,類的toString()方法可能會拋出NullPointerException,如果調用,當我糾正它,錯誤消失,但我不知道這是怎麼發生的? – xyy 2010-11-09 01:45:04

+3

好的工作xyz。你能否自己發佈問題的答案,然後接受答案,以便我們能夠解決這個問題?另外,如果他們解決了您的問題,則需要接受以前問題的答案。 – Zecas 2012-05-24 14:17:45

回答

74

的根本原因是,當調試Java調試接口將調用的toString()類,以顯示在類信息彈出框,所以如果toString方法沒有被正確定義,可能會發生這種情況。

+0

謝謝,它的工作 – 2017-05-18 13:50:40

27

我在Eclipse中調試時也有類似的異常。當我對一個物體進行掩蓋時,彈出框顯示一條com.sun.jdi.InvocationException消息。我的根本原因不是我的課程的方法,而是hashCode()方法。它導致NullPointerException,導致在調試過程中出現com.sun.jdi.InvocationException。一旦我處理了空指針,一切都按預期工作。

2

所以我在這裏有同樣的問題。發現我的域名實例正在從休眠會話中分離出來。我使用isAttached()來檢查並附加域使用d.attach()

1

在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); 

這有效導致無法打印的循環鏈接列表。感謝指針。

10

嗯,這可能是因爲上面提到的其他幾件事情。在我的情況下,問題是一樣的,但理由是另一回事。

在一個類(A)中,我有幾個對象,一個對象是另一個類(B)和其他一些對象。在此過程中,B類中的一個對象(String)變爲null,然後嘗試通過父類(A)訪問該對象。

因此,控制檯會拋出零點異常,但eclipse調試器會顯示上述錯誤。

我希望你能留下。

+0

這很有幫助+1 – mattymanme 2017-01-12 19:18:05

1

可能有兩個原因,一個元素不存在:

  1. 壞的XPath(// * [@ id'forgotQuote])
  2. 正確的XPath,但沒有元素(// * [包含( ')')

你會得到com.sun.jdi。當你運行Debug並且你將鼠標懸停在對WeBElement的引用上時(這與Selenium和Java有關),InvocationException?

我們用下面的,但如果由於惡劣XPath或不存在的元素(有效的XPath語法)返回false不能區分:

public static boolean isElementDisplayed(WebElement element) { 
    boolean isDisplayed = false; 

    try { 
     isDisplayed = element.isDisplayed(); 
    } catch (NoSuchElementException e) { 
     ;// No Worries 
    } 
    return isDisplayed; 
} 
0

刪除hashCode()equals()解決了我的問題。就我而言,我使用了Apache的commons-lang哈希代碼,並且等於用於手動創建非靜態類的構建器,因此編譯器不會拋出任何異常。但是在運行時它引起了調用異常。

2

我曾經有過同樣的問題。在我的情況下,toString()方法被嚴重創建。要精確靜態最終變量被列入toString方法時,開發者形成我的球隊被分到代碼清理任務,並添加的toString(),hashCode()方法的代碼和equals()方法來域對象在以往任何時候可能。但是在類中因爲過度查看它,所以他包含導致「com.sun.jdi.InvocationException」的最終靜態變量,只有當我懸停在具有異常的對象上時,纔會在調試中看到此異常。

0

在我的情況下,這是由於對象引用過時。 我使用自動化webdriver的硒我的應用程序,所以我鍵入的東西到一個文本框,然後導航到另一個頁面,所以當我回來的前一頁上,該對象得到陳舊。 因此,這是導致例外,我再次初始化的元素來處理它 - PageFactory.initElements(司機,的Test.class;

1

這是我的情況

我有一個BO學生其具有許多到一映射到另一個BO(其他研究了類)。

我想將數據保存到另一個表中,其爲具有外鍵都學生。在執行某些情況下,我帶來了列表學生在某些條件下,每個學生類的引用。

示例代碼: -

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我想保存。但在調試時,我檢查了student.getClasses()它顯示了這個異常(com.sun.jdi.InvocationException)。

我發現的問題是,使用提取HQL 查詢學生名單後,我沖洗關閉會議。當我刪除session.close();聲明時,問題解決了。

當我最終將所有數據保存到表格中時,會話關閉(MarksCardSiNoGen)。

希望這會有所幫助。

0

我在Eclipse中得到了類似的異常。這是由於java.lang.StackOverflowError錯誤。我在子類中覆蓋了toString()方法,它有JoinColumn,它使用父類的對象返回字符串,從而導致循環依賴。嘗試從toString()中刪除該對象,它會起作用。

相關問題