سؤال

This is what my code looks like:

Class A {

  private boolean valueChanged;

  public static void main(String args[]) {

    B obj = new B();
    obj.addPropertyChangeListener("valueChanged", new ValueChangeListener());
    obj.someMethodThatFiresChange();
 }

  private class ValueChangeListener implements PropertyChangeListener {
    public void propertyChange(PropertyChangeEvent evt) {
         if(Boolean.TRUE.equals(evt.getNewValue()) {
            doSomething(); //code never breaks here!!
         }
    }
  }

}

Class B {

 private boolean valueChanged;

 public void setValueChanged(boolean b) { 

     boolean oldVal = valueChanged;
     valueChanged = b;
     firePropertyChange("valueChanged", oldVal, valueChanged);
 }

 public void someMethodThatFiresChange() {
     setValueChanged(true);
 }

}  

This code however, doesn't seem to work - It never reaches the block that is supposed to be executed when the event is fired! What am I doing wrong here?

هل كانت مفيدة؟

المحلول

This works for me:

   public class A {

    /**
     * @param args
     */
    public static void main(String[] args) {

        B obj = new B();
        obj.addPropertyChangeListener("valueChanged", new ValueChangeListener());
        obj.someMethodThatFiresChange();

    }

    private static final class ValueChangeListener implements PropertyChangeListener {

        public void propertyChange(PropertyChangeEvent event) {
            System.out.println("huhu");

            if(Boolean.TRUE.equals(event.getNewValue())) {
                System.out.println("haha");
             }

        }

    }

    private static final class B {

        private boolean valueChanged;

        private final PropertyChangeSupport pcSupport = new PropertyChangeSupport(this);

        public void setValueChanged(boolean b) {

            boolean oldVal = valueChanged;
            valueChanged = b;
            pcSupport.firePropertyChange("valueChanged", oldVal, valueChanged);
        }

        public void someMethodThatFiresChange() {
            setValueChanged(true);
            setValueChanged(false);
            setValueChanged(true);
        }

        public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
            pcSupport.addPropertyChangeListener(propertyName, listener);
        }

        public void addPropertyChangeListener(PropertyChangeListener listener) {
            pcSupport.addPropertyChangeListener(listener);
        }
    }

   }

Output:

huhu
haha
huhu
huhu
haha

I think you missed something in your example.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top