Java как убрать слушателя - PullRequest
       15

Java как убрать слушателя

0 голосов
/ 27 декабря 2018

У меня проблема с моим Слушателем, я не знаю, как навсегда удалить слушателя для моего nameFieldLoginStage.Теперь, когда пользователь несколько раз переключает кнопку «Вход / Регистрация», мой метод вызывается много раз, и мой сервер получает много идентичных строк, отправляемых классом клиента.Я хочу удалить слушателя, когда мой метод будет завершен.

 @FXML
public TextField nameFieldLoginStage;


private void checkUsernameRegister() {

        nameFieldLoginStage.textProperty().addListener((observable, oldValue, newValue) -> {
            imageUsernameLoginStage.setVisible(true);
            if(registerButtonLoginStage.isSelected()) {
                if (getPropertyUsername().length() >= 3 && getPropertyUsername().length() < 13) {
                    client.checkUserName(getPropertyUsername());

                    do {
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    } while (!client.propertyCheckingFlagProperty().get());

                    if (client.getUsernameFlag()) {
                        imageUsernameLoginStage.setImage(new Image(ICONS_CANCEL_PNG));
                        usernameFlag = false;
                    } else {
                        imageUsernameLoginStage.setImage(new Image(ICONS_ACCEPT_PNG));
                        usernameFlag = true;
                    }
                } else {
                    imageUsernameLoginStage.setImage(new Image(ICONS_LENGTH_PNG));
                    usernameFlag = false;
                }


                setAcceptButtonLoginStage();
            }else
                imageUsernameLoginStage.setImage(null);
        });

    }

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Я не знаю, как удалить анонимного слушателя, как насчет использования внутреннего класса, который реализует слушателя?так что вы можете правильно инициализировать объект слушателя.Таким образом, вы можете использовать функцию removeListener ().

Или это звучит так, как будто вы хотите выполнить один раз, возможно, используя вместо этого задачу и планировщик?

0 голосов
/ 27 декабря 2018

Для этого вам нужно будет создать экземпляр слушателя.Этот экземпляр вы добавляете в качестве слушателя в textProperty, а изнутри слушателя вы можете удалить себя.Обычно я создаю для этого экземпляр вместо лямбды:

ChangeListener<String> changeListener = new ChangeListener<>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
        ...
        nameFieldLoginStage.textProperty().removeListener(this);
    }
};
nameFieldLoginStage.textProperty().addListener(changeListener);
...