gpt4 book ai didi

Java PropertyChangeListener

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:16 25 4
gpt4 key购买 nike

我正在尝试了解如何监听另一个类中的属性更改。下面是我的代码:

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

Main 是我需要了解属性更改的地方:

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

}

我只在最后一次触发了事件 (usersOnline=10)。我是 Java 的新手并试图找到解决方案,但无济于事。

最佳答案

代码:

private static PropertyChangeListener listen() {
System.out.println(test.getUsersOnline());
return null;
}

返回 null,这意味着“没有对象”,这反过来意味着 test.addPropertyChangeListener(listen()) 实际上是 test.addPropertyChangeListener(null) ,它不会注册任何东西。

您必须将 PropertyChangeListener 的有效实例传递给 addPropertyChangeListener() 方法。

编辑

我建议您阅读 Java 教程中有关 PropertyChangeListeners 的章节:
http://download.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

您的代码的另一个问题是您在ClassWithProperty 的构造函数中调用了firePropertyChange()。但是那个时候不可能注册任何监听器,所以没有任何作用。对 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
}
}

关于Java PropertyChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com