Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4445826

SwingPropertyChangeSupport.getPropertyChangeListeners exception

XMLWordPrintable

    • 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()

      ======================================================================

            peterz Peter Zhelezniakov
            dsvsunw Dsv Dsv (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: