com.sun.jdi.InvocationException在JDK8中调用了方法

时间:2015-07-21 14:00:41

标签: java string object java-ee

我正在将我的应用程序从JDK 7迁移到JDK 8.在执行操作时,如果创建了如下所示的com.sun.jdi.InvocationException occurred invoking method实例,我将面临异常TestField。我在调试时遇到异常,无法找到原因。我怀疑发生 NullPointerException InvocationException 会掩盖它。我在TestField中覆盖了以下Object方法。

实用程序类下面是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();
}   
}

有人遇到过这样的问题。有谁可以帮我解决同样的问题。感谢。

2 个答案:

答案 0 :(得分:2)

虽然我没有遇到过这个特定的问题,但我已经公平地分享了一些迁移问题,这些问题是由后来的进程掩盖的一些变化引起的。

我打算建议回溯并查看你的toString方法,但似乎有几个人已经遇到了同样的问题; toString或你的toHashCode是最有可能的罪魁祸首。在坚果shell中,空指针异常很可能被抛出但被com.sun.jdi.InvocationException错误掩盖。因此,如果你得到一个空指针异常,那么在此之前仍然会发生一些事情但是被屏蔽了。只需取出部分代码,然后逐步进行处理。

以下是我认为可以解决此问题的其他问题和答案(我没有将其标记为重复的声誉):

com-sun-jdi-invocationexception occurred invoking method

另外看一下这个问题,特别是Robin Green的评论,您是否尝试过以这种方式调试此代码?

Example

答案 1 :(得分:0)

您可能要检查类的hashcode()。如果无论如何它都会陷入nullPointer异常中,则Mockito将无法调用该方法。 例如,如果hashCode()已使用在类的构造函数中传递的参数实现,则其中的任何一个为null。