Как мне динамически изменять текст предупреждения?

Я пытаюсь создать простое окно загрузки в JavaFX и использую для этого информационное предупреждение. Вот мой код:

public Alert alert = new Alert(Alert.AlertType.INFORMATION);

public void drawData(javafx.event.ActionEvent actionEvent) {
    alert.setHeaderText(null);
    alert.setTitle("Loading...");
    alert.show();
    for (int i = 0; i < * something * ; i++) {
        /* some code here */
        System.out.println(i);
        alert.setContentText(Integer.toString(i));
    }
    alert.close();
}
}

Но, похоже, это не работает. Я получаю только пустое окно предупреждения:  введите описание изображения здесь

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


person J. Doe    schedule 29.03.2018    source источник
comment
Возможный дубликат предупреждения об обновлении JavaFX   -  person Sedrick    schedule 29.03.2018


Ответы (1)


Проблема в том, что вы выполняете свою работу в потоке пользовательского интерфейса:

for (int i =0; i < *something*; i++){
        *some code here*
        System.out.println(i);
        alert.setContentText(Integer.toString(i));
}

Это блокирует пользовательский интерфейс и любые обновления. В JavaFX обновления выполняются на каждом «тике» планировщика пользовательского интерфейса. Если вы обновите свойства элементов пользовательского интерфейса, они не будут обработаны, пока поток пользовательского интерфейса не получит следующий тик.

Для выполнения работы вам необходимо переместить его за пределы потока пользовательского интерфейса и использовать механизм для обновить. Дополнительную информацию о Worker и другие классы параллелизма, которые избавят вас от некоторых проблем.

person M. le Rutte    schedule 29.03.2018