Метод addPropertyChangeListener в Java - PullRequest
       4

Метод addPropertyChangeListener в Java

2 голосов
/ 02 августа 2011

Я реализовал этот метод, чтобы изменить значение PropertyChangeSupport, которое используется методом actionPerformed. Однако я сталкиваюсь с 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 ]

2 голосов
/ 02 августа 2011

Вероятно, это потому, что вы вызываете this.pcs.firePropertyChange(PROP_TASK, oldTask,this.task); до того, как вы вызываете любой класс, который создает экземпляр PropertyChangeSupport (pcs) в его методе addPropertyChangeListener (). то есть нижний блок кода вызывается до того, как вызывается верхний (если он вообще есть). Вы можете попробовать проверить, является ли pcs нулевым, в методе jButtonActionPerformed () и создать там экземпляр.

0 голосов
/ 24 августа 2011

Кажется, что в конструкторе отсутствует вызов:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...