簡體   English   中英

JavaFX2:我可以暫停后台任務/服務嗎?

[英]JavaFX2: Can I pause a background Task / Service?

我正在嘗試設置一個后台服務,該服務將從 csv 文件中批量加載交易數據。 此后台服務將從映射到控制器/演示者類中的方法的菜單項操作啟動。

經常,一些數據出現在 csv 文件中,而在數據庫中找不到主數據,這通常會導致上傳阻塞和失敗。

在這種情況下,我希望能夠讓后台服務暫停其處理並從演示者類調用對話框以接收用戶輸入。 用戶輸入將用於在數據庫中添加一個主行,之后后台服務應該從它停止的地方恢復(不是從 csv 文件的開頭,而是從導致錯誤的行)。

這是否可以在 JavaFX 中實現,也許使用 javafx.concurrent API? 我該怎么做呢?

解決方案

當您的后台進程遇到需要提示用戶輸入的情況時,請使用在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 行也缺失,后台任務再次暫停並顯示另一個提示對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM