2015-07-21 91 views
4

我正在將我的應用程序從JDK 7遷移到JDK 8.在執行操作時,如果創建瞭如下所示的TestField實例,我正面臨異常com.sun.jdi.InvocationException occurred invoking method。我在調試時遇到異常,找不到原因。我懷疑發生NullPointerExceptionInvocationException掩蓋它。我在TestField中覆蓋了下面的Object方法。com.sun.jdi.InvocationException在JDK8中發生調用方法

以下實用程序類是commons-lang jar的一部分。

HashCodeBuilder
EqualsBuilder
ToStringBuilder

public class TestField { 

private String name; 

private Rules rules; 

public TestField(String name, Rules rules) 

{ this.name = name; 
    this.rules = rules; 
} 

public String toString() { 
    return new ToStringBuilder(this) 
    .append("\n name", this.getName()) 
    .append("\n Rules", this.getRules()) 
    .append("\n ") 
    .toString(); 
} 

public boolean equals(Object other) { 
    if (!(other instanceof TestField)) return false; 
    TestField castOther = (TestField) other; 
    return new EqualsBuilder() 
     .append(this.getName(), castOther.getName()) 
       .append(this.getRules(), castOther.getRules()) 
     .isEquals(); 
} 

public int hashCode() { 
    return new HashCodeBuilder() 
     .append(this.getName())    
     .append(this.getRules())    
     .toHashCode(); 
} 
} 

有任何人遇到這樣的問題。任何人都可以請幫我解決這個問題。謝謝。

回答

0

雖然我還沒有遇到這個特殊的問題,但我得到了一些遷移問題,這些問題是由稍後進程所掩蓋的一些小變化引起的。

我打算建議回溯,看着你的toString方法,但似乎有幾個人已經有這個相同的確切問題; toString或你的toHashCode是最可能的罪魁禍首。在堅果殼中,空指針異常很可能被拋出,但被com.sun.jdi.InvocationException錯誤掩蓋。所以,如果你得到一個空指針例外的機會,在那之前還有一些事情發生,但被掩蓋了。只需將部分代碼取出並逐步將其回收。

這裏是另一個問題和答案,我認爲會解決這個問題(我沒有信譽標記爲一式兩份):

com-sun-jdi-invocationexception occurred invoking method

也看看這個問題,特別是羅賓格林評論,你有沒有試過這種方式調試這個代碼?

Example

+0

非常感謝您的回覆.. Blizzardegle。這是由任何類的toString()實現中的InvocationException所掩蓋的NullPointerException。它與JDK 7一起工作正常,但與JDK8無關。在toString()中,在沒有null檢查的情況下循環一個空字符串數組在JDK7中工作正常,但在JDK8中工作正常。因此,JDK8中的所有字符串操作似乎都需要空檢查。 – sridhar

相關問題