У меня есть простой графический интерфейс JavaFX, который запускает фоновую задачу при нажатии кнопки. Эта задача постоянно обновляет TextArea с последними сообщениями о прогрессе. Я продемонстрировал, как я решил это ниже. Проблема возникает, когда задача сталкивается с ошибкой, и требует от пользователя решения о том, как действовать. Моя цель состоит в том, чтобы это решение было принято с помощью оповещения, когда пользователь выбирает «Да» или «Нет». Однако я не смог реализовать эту функцию. Вот что я пытался сделать до сих пор:
- Создайте предупреждение в главном потоке JavaFX, передайте его сценарию и вызовите showAndWait. Это привело к ошибке, указывающей, что я не в потоке JavaFX.
- UpdateMessage () и т. Д. Расширяя сценарий как задачу, я продолжаю сталкиваться с NullPointerException.
- Создание нового экземпляра JavaFXиз скрипта.
Спасибо за вашу помощь!
Создание кнопок с помощью EventHandler:
private Button createButton() {
Button btn = new Button();
btn.setText("Run");
btn.setPrefWidth(100);
EventHandler<ActionEvent> buildWindow = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
TextArea output = buildCenterTextArea();
Task task = new Task<Void>() {
@Override public Void call() {
callScript(output); // Calls script
return null;
}
};
new Thread(task).start();
}
};
btn.setOnAction(buildWindow);
return btn;
}
private void buildCenterTextArea() {
// Builds a text area which the script updates with status
TextArea output = new TextArea();
output.setEditable(false);
this.borderpane.setCenter(output);
return output
}
В моем скрипте я обновляю текст, выполняяследующее:
output.setText(statusText+ "\n" + newStatus);