com.sun.jdi.InvocationException在JDK8中调用了方法
我正在将我的应用程序从JDK 7迁移到JDK 8.在执行操作时,我遇到了一个exception,当创建如下所示的TestField
实例时, com.sun.jdi.InvocationException occurred invoking method
了com.sun.jdi.InvocationException occurred invoking method
。 我在调试时遇到exception,无法找到原因。 我怀疑发生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(); } }
有没有人遇到这样的问题。 有谁可以帮我解决同样的问题。 谢谢。
虽然我没有遇到这个特定的问题,但我已经公平地分享了移植问题,这些问题是由后来的进程掩盖的微小变化引起的。
我打算建议回溯并查看你的toString方法,但似乎有几个人已经有了同样的问题; toString或你的toHashCode是最有可能的罪魁祸首。 在坚果shell中,空指针exception很可能被抛出但被com.sun.jdi.InvocationException错误掩盖。 因此,如果你得到一个Null指针exception,那么在此之前仍然会发生一些事情但是被掩盖了。 只需取出部分代码,然后逐步进行处理。
以下是我认为将解决此问题的其他问题和答案(我没有将其标记为重复的声誉):
com-sun-jdi-invocationexception发生了调用方法
另外看看这个问题,尤其是Robin Green的评论,您是否尝试过调试此代码?
例
您可能想要检查您的类的hashcode()。 如果它以任何方式陷入nullPointerexception,Mockito将无法调用该方法。 例如,如果hashCode()已经使用传递给int的构造函数传递的参数实现,并且其中任何一个都为null。