代码:
private static PropertyChangeListener listen() { System.out.println(test.getUsersonline()); return null;}返回
null表示“无对象”,这反过来意味着
test.addPropertyChangeListener(listen())有效
test.addPropertyChangeListener(null),不会注册任何内容。
您必须将有效的a实例传递
PropertyChangeListener给
addPropertyChangeListener()方法。
编辑
- 我建议您阅读有关PropertyChangeListener的Java教程章节:http
- //download.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html
代码的另一个问题是您调用
firePropertyChange()的构造函数
ClassWithProperty。但是那时,可能没有注册侦听器,因此它没有任何作用。触发事件
后,* 任何调用都会
addPropertyChangeListener()发生。 *
这是对您的代码进行了修改,使其可以正常工作(虽然尚未测试过……):
public class ClassWithProperty { private PropertyChangeSupport changes = new PropertyChangeSupport(this); private int usersonline = 0; public ClassWithProperty() { } public void setuponlineUsers() { while (usersonline < 10) { changes.firePropertyChange("usersOnline", usersOnline, ++usersOnline); } } public int getUsersonline() { return usersOnline; } public void addPropertyChangeListener(PropertyChangeListener l) { changes.addPropertyChangeListener(l); } public void removePropertyChangeListener(PropertyChangeListener l) { changes.removePropertyChangeListener(l); }}public class MainListener implements PropertyChangeListener { private ClassWithProperty test; public MainListener() { test = new ClassWithProperty(); test.addPropertyChangeListener(this); test.setuponlineUsers(); } public void propertyChange(PropertyChangeEvent evt) { System.out.println(test.getUsersonline()); } public static void main(String[] args) { new MainListener(); // do everything in the constructor }}


