我已經創建了一個簡單的LED,它接收來自開關/門等任意數字組件的輸入。問題是,當試圖實現PropertyChangeListener接口時,我得到一個NullPointerException。使用下面的代碼,如果我只是將其添加到JFrame窗體並嘗試運行它,我會得到此異常。我已經實施了LED,就像我爲門/開關所做的一樣,但由於某些原因,我的代碼產生了錯誤。任何幫助讚賞。addPropertyChangeListener上的NullPointerException
package Digital;
import java.awt.Image;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
public class LED extends javax.swing.JPanel implements PropertyChangeListener {
private Image led_on;
private Image led_off;
private Image image;
private Terminal input;
private transient PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public LED() {
java.net.URL url_on = getClass().getResource("images/LED_on.gif");
led_on = new javax.swing.ImageIcon(url_on).getImage();
this.setSize(led_on.getWidth(null), led_on.getHeight(null));
java.net.URL url_off = getClass().getResource("images/LED_off.gif");
led_off = new javax.swing.ImageIcon(url_off).getImage();
this.setSize(led_off.getWidth(null), led_off.getHeight(null));
this.image = led_off;
}
@Override
public void paintComponent(java.awt.Graphics g) {
g.drawImage(image, 0, 0, null);
}
public static final String PROP_INPUT = "input";
public Terminal getInput() {
return input;
}
public void setInput(Terminal input) {
if (input != null) {
input.addPropertyChangeListener(this);
this.addPropertyChangeListener(this);
}
Terminal oldInput = this.input;
this.input = input;
propertyChangeSupport.firePropertyChange(PROP_INPUT, oldInput, input);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public boolean Recalculate(Terminal input) {
if (input!=null) {
return input.getValue();
} else {
return false;
}
}
public void ledChange(boolean ledValue) {
if (ledValue) {
image = led_on;
} else {
image = led_off;
}
repaint();
}
public void propertyChange(PropertyChangeEvent pce) {
boolean terminalValue = Recalculate(input);
ledChange(terminalValue);
}
}
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –
無關:請學習java命名約定並堅持。 – kleopatra