public void run() {
while(true) {
// Wait on eventQueue till an event is present
EventObject event = null;
synchronized(eventQueue) {
try {
while (eventQueue.isEmpty())
eventQueue.wait();
event = eventQueue.remove(0);
} catch (InterruptedException e) {
// XXX Log "Event dispatch thread interrupted. Exiting"
return;
}
}
// Now we have event & hold no locks; deliver evt to listeners
AbstractPreferences src=(AbstractPreferences)event.getSource();
if (event instanceof PreferenceChangeEvent) {
PreferenceChangeEvent pce = (PreferenceChangeEvent)event;
PreferenceChangeListener[] listeners = src.prefListeners();
for (int i=0; i< listeners.length; i++)
listeners[i].preferenceChange(pce);
} else {
NodeChangeEvent nce = (NodeChangeEvent)event;
NodeChangeListener[] listeners = src.nodeListeners();
if (nce instanceof NodeAddedEvent) {
for (int i=0; i< listeners.length; i++)
listeners[i].childAdded(nce);
} else {
// assert nce instanceof NodeRemovedEvent;
for (int i=0; i< listeners.length; i++)
listeners[i].childRemoved(nce);
}
}
}
}
|