1

我试图在我的代码中使用 observable 并且这个问题让我很难过。

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());
        }
    }

有两个观察者在观察这个可观察类,当使用测试行“Observers : 2”调用notifyObservers该方法时,它确实会发送出去。setSelectedTransaction然而,下一个方法setLog似乎没有观察者给出“观察者:0”。我不认为我只能使用一次可观察的方法。

4

2 回答 2

2

此问题最可能的原因是您没有在同一个对象上调用该方法。假设两个对象相同是一个常见的错误,因为它们具有相同的名称或其他一些混淆。我会打印出每个对象的 hashCode 或使用调试器来确保您确实在调用同一个对象。

顺便说一句,您可以尝试以相反的顺序拨打电话,或者不止一次地测试您的理论。

于 2013-01-24T10:12:01.147 回答
0

您用来调用and的对象不同,或者观察者可能会在更新方法中将自己作为观察者移除setSelectedTransactionsetLog

于 2013-01-24T10:20:07.877 回答