1

コードでオブザーバブルを使用しようとしていますが、この問題が発生して苦労しています。

public class observeState extends Observable
{
    public void setSelectedTransaction(int idx)
    {
        if (selectedTransaction != idx)
        {
            this.selectedTransaction = idx;
            setChanged();
            notifyObservers("setSelectedTransaction");
            System.out.println("Observers : "+this.countObservers());
        }
    }

    public void setLog(Log log)
    {
        if(theLog != log) {
            theLog = log;
            System.out.println(theLog.getLogTransactions().size() + "setLog");
            setChanged();
            notifyObservers("setLog");
            System.out.println("Observers : "+this.countObservers());
        }
    }

このオブザーバブル クラスを監視する 2 つのオブザーバーがあり、テスト行「Observers : 2」でメソッドが呼び出されるとnotifyObservers送信されます。setSelectedTransactionただし、次の方法setLogでは、「Observers : 0」を与えるオブザーバーがないようです。観察可能なメソッドを一度しか使用できないとは思いません。

4

2 に答える 2

2

この問題の最も可能性の高い原因は、同じオブジェクトでメソッドを呼び出していないことです。2 つのオブジェクトが同じ名前であるなどの理由で同じであると想定するのはよくある間違いです。各オブジェクトの hashCode を出力するか、デバッガーを使用して、実際に同じオブジェクトを呼び出していることを確認します。

ところで、逆の順序で呼び出しを行ったり、理論をテストするために複数回呼び出したりすることができます。

于 2013-01-24T10:12:01.147 に答える
0

とを呼び出すために使用しているオブジェクト異なるか、オブザーバーがupdate メソッドでオブザーバーとして自身を削除している可能性があります。setSelectedTransactionsetLog

于 2013-01-24T10:20:07.877 に答える