我想建立一个后台服务会从一个CSV文件执行的交易数据批量加载。 这个后台服务将从映射到控制器/主持人类的方法的菜单项的动作来启动。
自从所以很多时候,一些数据对于没有主数据可以在数据库中找到CSV文件轮番上涨,这通常会导致上传窒息和失败。
在这样的场合,我希望能有后台服务暂停其处理和演示类中调用一个对话框,采取用户输入。 用户输入将用于在数据库中,在此之后,后台服务应该从哪里它都不放过(而不是从CSV文件的开头,但其引起错误的行)重新添加主行。
这是可能实现在JavaFX中,也许与javafx.concurrent API? 我将如何去这样做呢?
解
当你的后台进程遇到它要求用户被提示输入,使用情况FutureTask在执行Platform.runLater到showAndWait 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();
}
...
}
示例应用程序
我创建了一个小的,完整的示例应用程序演示了这种方法。
示例应用程序的输出是:
样本输出解释
行读不遗漏值都只是普通的棕色。 用输入提示值线有一个浅绿色背景。 十四线已读,后台任务已在其失踪的值6号线暂停一次。 用户被提示输入缺少的值(该用户输入xyzzy
),则该过程继续,直到线14也被丢失,后台任务被再次暂停,并且正在显示另一个提示对话框。