解决方案
当您的后台进程遇到需要提示用户输入的情况时,请使用Platform.runLater中执行的FutureTask在 JavaFX 应用程序线程上显示并等待对话框提示。在后台进程中,使用futureTask.get暂停后台进程,直到用户输入允许进程继续的必要值。
示例代码片段
这是这种方法的代码本质,可以放在后台进程的调用方法中:
String nextText = readLineFromSource();
if ("MISSING".equals(nextText)) {
updateMessage("Prompting for missing text");
FutureTask<String> futureTask = new FutureTask(
new MissingTextPrompt()
);
Platform.runLater(futureTask);
nextText = futureTask.get();
}
...
class MissingTextPrompt implements Callable<String> {
private TextField textField;
@Override public String call() throws Exception {
final Stage dialog = new Stage();
dialog.setScene(createDialogScene());
dialog.showAndWait();
return textField.getText();
}
...
}
示例应用程序
我创建了一个小而完整的示例应用程序来演示这种方法。
示例应用程序的输出是:
示例输出说明
没有缺失值的读取行只是普通的棕色。输入提示值的行具有淡绿色背景。已经读取了 14 行,后台任务已经在第 6 行暂停了一次,缺少一个值。提示用户输入缺失值(用户输入的值xyzzy
),然后该过程继续直到第 14 行也缺失,后台任务再次暂停,并显示另一个提示对话框。