gpt4 book ai didi

multithreading - JavaFX2 : Can I pause a background Task/Service?

转载 作者:行者123 更新时间:2023-12-04 00:35:45 26 4
gpt4 key购买 nike

我正在尝试设置一个后台服务,该服务将从 csv 文件中批量加载交易数据。此后台服务将从映射到 Controller /演示者类中的方法的菜单项操作启动。

经常,一些数据出现在 csv 文件中,而在数据库中找不到主数据,这通常会导致上传阻塞和失败。

在这种情况下,我希望能够让后台服务暂停其处理并从演示者类调用对话框以接收用户输入。用户输入将用于在数据库中添加一个主行,之后后台服务应该从它停止的地方恢复(不是从 csv 文件的开头,而是从导致错误的行)。

这是否可以在 JavaFX 中实现,也许使用 javafx.concurrent API?我该怎么做呢?

最佳答案

解决方案

当您的后台进程遇到需要提示用户输入的情况时,请使用 FutureTask执行于 Platform.runLatershowAndWait 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();
}
...
}

示例应用程序

我创建了 a small, complete sample application来演示这种方法。

示例应用程序的输出是:

promptingtaskdemooutput

示例输出说明

读取的没有缺失值的行只是普通的棕色。
输入了提示值的行具有淡绿色背景。
已读取 14 行,后台任务已在第 6 行暂停一次,该行缺少值。提示用户输入缺失值(用户输入 xyzzy ),然后该过程继续直到第 14 行也缺失,后台任务再次暂停并显示另一个提示对话框。

关于multithreading - JavaFX2 : Can I pause a background Task/Service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com