Можно ли пропустить событие, если вы проверите его состояние, а затем добавите слушателя? - PullRequest
0 голосов
/ 10 ноября 2019

Допустим, у меня есть работник, который выполняет некоторые фоновые задачи. Возможно ли что-то подобное, чтобы это произошло?

  1. Я проверяю State работника, и он все еще State.RUNNING.
  2. Я добавляю ChangeListener ксвойство состояния с лямбда-выражением, которое будет выполнено после его завершения .stateProperty().addListener((o, v1, v2) -> doSomething())
  3. Между шагами 1 и 2 в фоновом потоке рабочее состояние изменилось на State.SUCCEEDED.

Сейчаси ChangeListener никогда не срабатывает, и теперь я фактически всегда ожидаю, что событие произойдет, потому что оно уже произошло, и я пропустил его.

Если это возможно, как я могу предотвратить это?

1 Ответ

3 голосов
/ 10 ноября 2019

Пока это происходит в потоке приложения JavaFX, и регистрация слушателя происходит до того, как вы «вернете элемент управления обратно в JavaFX» после проверки состояния (т. Е. Это происходит в том же обработчике события, Platform.runLater runnable / change listener,и т. д.), вы будете уведомлены об изменении.

Вот причина, по которой: Изменения в свойстве Task.state выполняются в потоке приложения, который является потоком, в котором работает ваш код. Это означает, что до тех пор, пока вы не вернете элемент управления в JavaFX, он не сможет выполнить обновление свойства, и после добавления прослушивателя значение, содержащееся в этом свойстве, останется таким же, как и прочитанное вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...