我有一个简单的JavaFX GUI,它在单击按钮时触发后台任务。此任务使用其最新进度消息连续更新TextArea。我已经在下面演示了如何解决此问题。当任务遇到错误时会出现问题,并且需要用户决定如何进行。我的目标是通过用户选择“是”或“否”的警报来做出此决定。不过,我一直无法实现此功能。到目前为止,这是我尝试过的事情:
- 在JavaFX主线程中创建一个Alert,将其传递给脚本,然后调用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);