我遇到了这个链接http://examples.javacodegeeks.com/core-java/beans/bean-property-change-event-listener/,其中有一个PropertyChangeListener示例。在我的应用程序中,我有一个实现runnable接口的Java Thread。我在开始时初始化了PropertyChangeSupport变量并注册了PropertyChangeListener。我的意图是,当我使用adb shell setprop设置属性说debug.xx.yyy时,我希望触发propertyChange函数调用。但它永远不会被触发。任何人都可以指出我哪里出错了?
以下是我的示例代码:
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
....
public class MyThread implements Runnable {
public void run() {
MyPropertyChangeSupport myPCS = new MyPropertyChangeSupport();
myPCS.addMyPCS(new MyPCListener());
...
}
...
public class MyPropertyChangeSupport {
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void addMyPCS(PropertyChangeListener listener) {
pcs.addPropertyChangeListener("debug.xx.yyy", listener);
}
}
public class MyPCListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
try {
int oldValue = (Integer) evt.getOldValue();
int newValue = (Integer) evt.getNewValue();
if (oldValue == newValue) {
Log.d(TAG, "Ignoring debug property set " + newValue);
} else {
Log.d(TAG, "Got new value " + newValue);
...
}
} catch (ClassCastException e) {
Log.e(TAG, "debug property does not have integer!");
e.printStackTrace();
} catch (NullPointerException e) {
Log.e(TAG, "debug property read encountered NULL!");
e.printStackTrace();
}
}
}
}