Java中的addPropertyChangeListener方法

时间:2011-08-02 03:53:49

标签: java listener

我已经实现了这个方法来改变actionPerformed方法正在使用的PropertyChangeSupport的值。但是,我遇到了NullPointerException,因为PropertyChangeSupport实例是 null 。谁能告诉我这个问题?以下是代码段。

对于PropertyChangeListener:

public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
    if (pcs == null) {
        pcs = new PropertyChangeSupport(this);
    }
    this.pcs.addPropertyChangeListener(listener);
}

对于活动:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Task oldTask = this.task;
    this.task = new TaskImpl();
    this.pcs.firePropertyChange(PROP_TASK, oldTask,this.task);
    this.updateForm();
}

2 个答案:

答案 0 :(得分:2)

这可能是因为在调用其addPropertyChangeListener()方法中实例化PropertyChangeSupport(pcs)的任何类之前,您正在调用this.pcs.firePropertyChange(PROP_TASK, oldTask,this.task);。即,在调用顶部(如果有的话)之前调用底部代码块。您可以尝试在jButtonActionPerformed()方法中检查pcs是否为null并在那里实例化。

答案 1 :(得分:0)

似乎是构造函数中缺少的调用:

public TaskEditorPanel() {
    if (null == this.taskMgr) {
        this.taskMgr = Lookup.getDefault().lookup(TaskManager.class);
    }
    if (null != this.taskMgr) {
        this.task = this.taskMgr.createTask();
    }
    initComponents();
    this.updateForm();

    // missed call
    this.pcs = new PropertyChangeSupport(this);
}