-1

我有这段代码:

EventSnapshot snapshotEvent = new EventSnapshot();

EventSnapshot currentEvent = new EventSnapshot();

do
{
   ...              
currentEvent.setContent(in_stats); 
   ...              
if(!snapshotEvent.equals(currentEvent))
    snapshotEvent.setContent(in_stats);
}
while(true);

在第一个周期我得到一个NullPointerException,因为显然对象 snapshotEvent 是空的。在第二个周期这不会发生。如何避免这个问题?

编辑

这是错误,它发生在这里:

java.lang.NullPointerException
    at org.w3c.jigmonitor.EventSnapshot.equals(EventSnapshot.java:40)



public class EventSnapshot 
{
    private Statistics content;

    public EventSnapshot()
    {
        super();
    }

    /**
     * @return the content
     */
    public Statistics getContent() 
    {
        return content;
    }

    /**
     * @param content the content to set
     */
    public void setContent(Statistics content) 
    {
        this.content = content;
    }

    public boolean equals(EventSnapshot es)
    {
        return this.content.equals(es.getContent()); // here...
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "EventSnapshot [content=" + content + "]";
    }   
}
4

5 回答 5

0

更改 if 语句:

if(snapshotEvent!= null && !snapshotEvent.equals(currentEvent))
    snapshotEvent.setContent(in_stats);
}

编辑

编辑后,错误发生在 equals 方法中:

public boolean equals(EventSnapshot es)
    {
        return this.content.equals(es.getContent()); // here...
    }

它可能是由两个因素引起的:

  1. this.content一片空白
  2. es一片空白

只需记录或调试它,看看哪个是真的

于 2012-07-08T09:15:34.113 回答
0

它不是那个snapshotEventnull而是它的内容:snapshotEvent.content. 您可以将equals方法更改为:

public boolean equals(EventSnapshot es)
{
   if(es == null) return false;
   if(content == null) return false;
   if(es.content == null) return false;
   return this.content.equals(es.getContent()); // here...
}
于 2012-07-08T09:28:33.337 回答
0

您的方法已损坏-如果为 null EventSnapshot.equals,它将引发异常。content

确保快照永远不会有空内容,或者更改equals如下所示:

public boolean equals(EventSnapshot es) {
    // TODO: Decide how to handle the situation where es itself is null
    if (content == es.getContent()) {
        return true;
    }
    if (content == null || es.getContent() == null) {
        return false;
    }
    return content.equals(es.getContent());
}

请注意,在不覆盖and的情况下提供equals()新的重载有点奇怪。Object.equals()Object.hashCode()

于 2012-07-08T09:30:47.540 回答
-1

您需要检查,如果 shapshotEvent != null 或用空块捕获 NullPointerException。

于 2012-07-08T09:09:35.313 回答
-1

从您提供的代码中,很难说出导致 NullpointerException 的原因。但是你总是可以抓住它,让你的代码进入下一次迭代;也许可以解决它:

EventSnapshot snapshotEvent = new EventSnapshot();
EventSnapshot currentEvent = new EventSnapshot();
do {
    try {
        ...              
        currentEvent.setContent(in_stats); 
        ...              
        if(!snapshotEvent.equals(currentEvent))
            snapshotEvent.setContent(in_stats);
    } catch (Exception e) {
        e.printStacktrace();
    }
} while(true);
于 2012-07-08T09:23:34.747 回答