Я реализую редактор документов с клипсами JavaFX8 и e (fx) и хочу, чтобы пользователь был проинформирован, когда экспорт (запись на диск) продолжается. Я использую основной (GUI) поток для этого, поскольку я хочу заблокировать gui во время этой операции (которая занимает 2-3 секунды). Во время этой операции я хочу показать небольшое всплывающее окно, чтобы сообщить пользователю, что экспорт продолжается, ничего необычного.Диалоговое окно JavaFX 8
@FXML
public void export() {
Dialog dialog = new Dialog();
dialog.setContentText("exporting ...");
dialog.show();
// some lenghty methods come here, ~equivalent to Thread.sleep(3000);
dialog.hide();
}
При нажатии на соответствующую кнопку, которая вызывает метод экспорта, я как-то два диалога, один из них не закрывается и остается открытым после того, как метод закончил.
ли кто-то имеет представление о том, что здесь происходит? Я действительно заинтересован в простом решении, мне не нужно иметь индикатор выполнения и т. Д.
Еще одна возможность - показать курсор ожидания перед началом работы и вернуться к курсору по умолчанию после этого , К сожалению, это тоже не работает. Я понимаю, что пользовательский интерфейс заблокирован во время «длительной» операции, но я не знаю, почему я не могу изменить пользовательский интерфейс до и после этой операции.
Спасибо за ваш ответ. Я понимаю, что использование длинных операций в другом потоке - это рекомендуемый способ сделать это, я просто надеялся, что есть более простой способ, поскольку создание задач/сервисов для этих операций делает код более сложным (также обработка отладки (включая показ предупреждений) более сложный). Кроме того, я должен убедиться, что пользователь не нажимает никаких кнопок во время операции (это не имеет никакого смысла в моем приложении). Вот почему я думал, что использование потока приложений - это путь, так как я хочу, чтобы пользовательский интерфейс был заблокирован. –
Мое решение выше не использует задачу или службу, просто вращая нить. Использование progressAlert.initModality (Modality.WINDOW_MODAL); & progressAlert.initModality (Modality.WINDOW_MODAL); progressAlert.initOwner (stage); вы гарантируете, что этап с процессом не будет доступен, пока поток не будет завершен. Используйте Application Modal для полной блокировки пользовательского интерфейса. Скручивание продолжительного процесса в потоке пользовательского интерфейса приведет к тому, что пользовательский интерфейс будет заморожен, и, скорее всего, пользователь заставит выйти из приложения. При таком подходе анимация подтверждает, что приложение все еще работает. –