Class 是 Observable 并实现了 Observer,但不会触发最后一个元素
Class is Observable and implements Observer, but is not triggering the last element
我有 3 个 classes,Manager,MessageObserver,WidgetObserver
- Manager 是一个 Observable class。
- MessageObserver 既是一个 Observer(对于 Manager),也是一个 Observable 本身。
- WidgetObserver 是一个观察者(对于 MessageObserver)。
当我调用 testManager() 时,我触发了 MessageObserver 中的 update() 方法,但是 MessageObserver 中的 notifyObservers() 方法没有触发 WidgetObserver 中的 update() 方法。
public Manager extends Observable
{
private ArrayList<Observer> observers = new ArrayList<>();
public Manager()
{
// Set local variables
}
public void addObserver(Observer o)
{
observers.add(o);
}
public void newMessage(String a1, String a2)
{
this.a1 = a1;
this.a2 = a2;
setChanged();
notifyObservers();
}
}
public MessageObserver extends Observable implements Observer
{
private ArrayList<Observer> observers = new ArrayList<>();
public MessageObserver(Manager aManager)
{
mManager = aManager;
mManager.addObserver(this);
// set local variables from mManager.getValues()
}
public void update(Observable obj, Object arg)
{
System.out.println("Triggered MessageObserver");
...
setChanged();
notifyObservers();
}
}
public WidgetObserver implements Initializable, Observer
{
public WidgetObserver()
{
mManager= new Manager();
mMessageObserver = new MessageObserver(mManager);
mMessageObserver.addObserver(this);
}
public void initialize()
{
// Establish local variables
testManager();
}
private void testManager()
{
mManager.newMessage(...);
}
public void update(Observable obj, Object arg)
{
System.out.println("WIDGET TRIGGERED");
// Add value to local array
}
}
一个猜测是 Observer 列表为 null 所以请检查你是否注册了 Observer.In 你的代码观察者列表与 observable 不同。
Observable 中的逻辑
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);
我有 3 个 classes,Manager,MessageObserver,WidgetObserver
- Manager 是一个 Observable class。
- MessageObserver 既是一个 Observer(对于 Manager),也是一个 Observable 本身。
- WidgetObserver 是一个观察者(对于 MessageObserver)。
当我调用 testManager() 时,我触发了 MessageObserver 中的 update() 方法,但是 MessageObserver 中的 notifyObservers() 方法没有触发 WidgetObserver 中的 update() 方法。
public Manager extends Observable
{
private ArrayList<Observer> observers = new ArrayList<>();
public Manager()
{
// Set local variables
}
public void addObserver(Observer o)
{
observers.add(o);
}
public void newMessage(String a1, String a2)
{
this.a1 = a1;
this.a2 = a2;
setChanged();
notifyObservers();
}
}
public MessageObserver extends Observable implements Observer
{
private ArrayList<Observer> observers = new ArrayList<>();
public MessageObserver(Manager aManager)
{
mManager = aManager;
mManager.addObserver(this);
// set local variables from mManager.getValues()
}
public void update(Observable obj, Object arg)
{
System.out.println("Triggered MessageObserver");
...
setChanged();
notifyObservers();
}
}
public WidgetObserver implements Initializable, Observer
{
public WidgetObserver()
{
mManager= new Manager();
mMessageObserver = new MessageObserver(mManager);
mMessageObserver.addObserver(this);
}
public void initialize()
{
// Establish local variables
testManager();
}
private void testManager()
{
mManager.newMessage(...);
}
public void update(Observable obj, Object arg)
{
System.out.println("WIDGET TRIGGERED");
// Add value to local array
}
}
一个猜测是 Observer 列表为 null 所以请检查你是否注册了 Observer.In 你的代码观察者列表与 observable 不同。
Observable 中的逻辑
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);