I have 3 classes, Manager, MessageObserver, WidgetObserver
When I call testManager(), I get the update() method in MessageObserver to trigger, but the notifyObservers() method inside of MessageObserver does NOT trigger the update() method in WidgetObserver.
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
}
}
one guess will be list of Observer is null so please check you have register Observer.In your code observer list different from observable.
Logic in Observable
if (!changed)
return;
arrLocal = obs.toArray();
clearChanged();
}
for (int i = arrLocal.length-1; i>=0; i--)
((Observer)arrLocal[i]).update(this, arg);