-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が空であるため、最初のサイクルでaを取得します。2番目のサイクルではこれは起こりません。どうすればこの問題を回避できますか?

編集

これはエラーであり、ここで発生します。

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

メソッドが壊れています-がnullEventSnapshot.equalsの場合、例外がスローされます。content

スナップショットにnullコンテンツが含まれていないことを確認するか、ように変更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());
}

とをオーバーライドせequals()ずに新しいオーバーロードを提供するのは少し奇妙であることに注意してください。Object.equals()Object.hashCode()

于 2012-07-08T09:30:47.540 に答える
0

それはそれではありませんが、snapshotEvent内容nullです: 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 に答える
-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 に答える