2012-05-14 4 views
1

Это то, что мой код выглядит следующим образом:Почему мой владелец недвижимости не работает?

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); 
} 

} 

Этот код, однако, кажется, не работает - он никогда не достигнет блока, который должен быть выполнен, когда событие вызывается ! Что я здесь делаю неправильно?

+1

Он не достигает метода 'propertyChange' или не вводит оператор' if'? Поместите точку останова в 'someMethodThatFiresChange' и отлаживайте оттуда. – dj18

ответ

2

Это работает для меня:

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); 
     } 
    } 

    } 

Выход:

huhu 
haha 
huhu 
huhu 
haha 

Я думаю, вы пропустили что-то в вашем примере.

Смежные вопросы