我正在试图弄清楚如何在另一个班级中听取属性变化.以下是我的代码:
ClassWithProperty具有我想要监听的属性:
public class ClassWithProperty {
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
private int usersOnline;
public int getUsersOnline() {
return usersOnline;
}
public ClassWithProperty() {
usersOnline = 0;
while (usersOnline<10) {
changes.firePropertyChange("usersOnline", usersOnline, usersOnline++);
}
}
public void addPropertyChangeListener(
PropertyChangeListener l) {
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(
PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
}
}
Run Code Online (Sandbox Code Playgroud)
主要是我需要了解房产变化的地方:
public class Main {
private static ClassWithProperty test;
public static void main(String[] args) {
test = new ClassWithProperty();
test.addPropertyChangeListener(listen());
}
private static PropertyChangeListener listen() {
System.out.println(test.getUsersOnline());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我最后一次只触发了事件(usersOnline = 10).我是Java新手并试图找到解决方案,但无济于事.
a_h*_*ame 13
代码:
private static PropertyChangeListener listen() {
System.out.println(test.getUsersOnline());
return null;
}
Run Code Online (Sandbox Code Playgroud)
返回null意味着"没有对象",这反过来意味着test.addPropertyChangeListener(listen())有效 test.addPropertyChangeListener(null),不会注册任何东西.
您必须将a的有效实例传递PropertyChangeListener给该addPropertyChangeListener()方法.
编辑
我建议你阅读关于PropertyChangeListeners的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
}
}
Run Code Online (Sandbox Code Playgroud)