0

我遇到了这个链接http://examples.javacodegeeks.com/core-java/beans/bean-property-change-event-listener/其中有一个 PropertyChangeListener 的例子。在我的应用程序中,我有一个实现可运行接口的 Java 线程。我一开始就初始化了 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();
            }
        }
    }
}
4

0 回答 0