JavaFX2:我可以暂停后台任务/服务?(JavaFX2: Can I pause a backg

2019-07-20 02:43发布

我想建立一个后台服务会从一个CSV文件执行的交易数据批量加载。 这个后台服务将从映射到控制器/主持人类的方法的菜单项的动作来启动。

自从所以很多时候,一些数据对于没有主数据可以在数据库中找到CSV文件轮番上涨,这通常会导致上传窒息和失败。

在这样的场合,我希望能有后台服务暂停其处理和演示类中调用一个对话框,采取用户输入。 用户输入将用于在数据库中,在此之后,后台服务应该从哪里它都不放过(而不是从CSV文件的开头,但其引起错误的行)重新添加主行。

这是可能实现在JavaFX中,也许与javafx.concurrent API? 我将如何去这样做呢?

Answer 1:

当你的后台进程遇到它要求用户被提示输入,使用情况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也被丢失,后台任务被再次暂停,并且正在显示另一个提示对话框。



文章来源: JavaFX2: Can I pause a background Task / Service?