@java_beginner
Учусь все время...

FXML & PropertyChangeListener — причина возникновения NPE?

Доброе время суток,
пытаюсь состыковать jssc и FXML app. Задача - менять значение main_label, если пришли данные из serialPort. Для этого решил использовать PropertyChangeListener.
Далее использовал пример из web:
public class ListenToMe  {
    
    private String variable = "Initial";
    private PropertyChangeSupport support = new PropertyChangeSupport(this);

    public void addListener(PropertyChangeListener listener) {
            support.addPropertyChangeListener(listener);
    }

    public void removeListener(PropertyChangeListener listener) {
            support.removePropertyChangeListener(listener);
    }

    public void setVariable(String newValue) {
            String oldValue = variable;
            variable = newValue;
            support.firePropertyChange("variable", oldValue, newValue);
    }
}

В PortReader добавил Listener:
private static class PortReader implements SerialPortEventListener {

    @Override
    public void serialEvent(SerialPortEvent event) {
        if(event.isRXCHAR() && event.getEventValue() > 0){
            try {
                ListenToMe test = new ListenToMe();
                test.addListener(new MainScreenController());

                String buffer = serialPort.readString();
                test.setVariable(buffer);
                System.out.println("Received " + buffer);
            }
            catch (SerialPortException ex) {
                System.out.println(ex);
            }
        }
    }

Содержимое MainScreenController:
@FXML
    public Label main_label;

    @FXML
    @Override
    public void propertyChange(PropertyChangeEvent event) {
        
        String property = event.getPropertyName();
            if (property.equals("variable")) {
        
                String buffer = (String) event.getNewValue();
             
                if (buffer.equals("A")){
                    main_label.setText("Hello World!");
                }
                else if (buffer.equals("2")){
                    main_label.setText(buffer );  
                }
                else System.out.println("Got value " + event.getNewValue());  
            }
    }

В результате, как только в SerialPort приходит "А" / "2" получаю:
Exception in thread "EventThread COM1" java.lang.NullPointerException
	at test.v0.MainScreenController.propertyChange(MainScreenController.java:42)
	at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
	at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
	at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
	at test.v0.ListenToMe.setVariable(ListenToMe.java:37)
	at test.v0.MainScreen$PortReader.serialEvent(MainScreen.java:87)
	at jssc.SerialPort$EventThread.run(SerialPort.java:1112)

Что я делаю не так?
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы