-
Bug
-
Resolution: Fixed
-
P3
-
1.4.0
-
beta2
-
sparc
-
solaris_7
Name: sdR10048 Date: 04/16/2001
public PropertyChangeListener[] javax.swing.event.getPropertyChangeListeners()
throws ArrayStoreException if some PropertyChangeListeners have been
added previously. See example:
--------------------------------------------------
[archer] ~/tmp
% cat test.java
import java.beans.*;
import javax.swing.event.*;
class FakePropertyChangeAdapter implements PropertyChangeListener{
public void propertyChange(PropertyChangeEvent evt){};
}
public class test {
public static void main(String[] args) {
SwingPropertyChangeSupport pcs = new
SwingPropertyChangeSupport("the thing");
pcs.addPropertyChangeListener(new FakePropertyChangeAdapter());
pcs.getPropertyChangeListeners();
}
}
[archer] ~/tmp
% java -version
java version "1.4.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b58)
Java HotSpot(TM) Client VM (build 1.4.0-beta-b58, mixed mode)
[archer] ~/tmp
% java test
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:293)
at javax.swing.event.SwingPropertyChangeSupport.getPropertyChangeListeners(SwingProp
ertyChangeSupport.java:150)
at test.main(test.java:13)
--------------------------------------------------
Javadoc says:
public PropertyChangeListener[] getPropertyChangeListeners()
Returns an array of all the listeners that were added to the SwingPropertyChangeSupport
object with addPropertyChangeListener().
If some listeners have been added with a named property, then the returned array will be a
mixture of PropertyChangeListeners and PropertyChangeListenerProxys. If
the calling method is interested in distinguishing the listeners then it must test each element to
see if it's a PropertyChangeListenerProxy perform the cast and examine the
parameter.
PropertyChangeListener[] listeners = support.getPropertyChangeListeners();
for (int i = 0; i < listeners.length; i++) {
if (listeners[i] instanceof PropertyChangeListenerProxy) {
PropertyChangeListenerProxy proxy =
(PropertyChangeListenerProxy)listeners[i];
if (proxy.getPropertyName().equals("foo")) {
// proxy is a PropertyChangeListener which was associated
// with the property named "foo"
}
}
}
Overrides:
getPropertyChangeListeners in class
PropertyChangeSupport
Returns:
all of the PropertyChangeListeners added or an empty array if no listeners
have been added
Since:
1.4
See Also:
PropertyChangeListenerProxy,
PropertyChangeSupport.getPropertyChangeListeners()
======================================================================