java - 如何在连续任务(JavaFX)之间传递参数或引用?
问题描述
我有从 JavaFx 主线程触发的连续任务,每个任务都调用一个服务。我从一个任务中检索到的值应该决定下一个任务的行为方式。我已经通过方法(下面的简化示例)实现了它,但它有点像意大利面条代码。
import javafx.event.ActionEvent;
import javafx.concurrent.Task;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class SomeControllerClass{
private Executor exec;
@Autowired
private UserService userService;
@Autowired
private SessionService sessionService;
public void initialize() {
exec = Executors.newSingleThreadExecutor(runnable -> {
Thread t = new Thread(runnable);
t.setDaemon(true);
return t ;
});
}
@FXML
private void buttonAction(ActionEvent event){
final String user = userTextField.getText().trim();
final String pass = passTextField.getText().trim();
Task<UserBean> task1 = new Task<UserBean>(){
@Override
protected UserBean call() throws Exception{
return userService.getUserLogin(user, pass);
}
};
task1.setOnSucceeded(e -> secondTask(task1.getValue()));
task1.setOnFailed(e -> methodToNotifySomeException());
exec.execute(task1);
}
private void secondTask(UserBean bean){
//bean will be null only if the login failed
if(bean==null) someLabel.setText("Wrong user or password");
else{
Task<Void> task2 = new Task<Void>(){
@Override
protected Void call() throws Exception{
sessionService.setActiveUser(bean);
return null;
}
};
task2.setOnSucceeded(e -> methodToChangeScene());
task2.setOnFailed(e -> manageSomeException());
exec.execute(task2);
}
}
}
我也尝试过ExecutorService但它大致相同,我无法实例化我的连续任务并找到第二个任务的方法来从第一个任务中检索一个值,而无需在方法中分离每个任务。
是否有任何我缺少的 Executor 实现可以让您在任务之间传递参数?是否有任何我完全不知道的“最佳实践”可以避免所有这些问题?
解决方案
推荐阅读
- laravel - 如果分配了 parent_id,如何删除记录?
- javascript - Microsoft Graph Api - 约会预订日期时间问题
- r - R中有什么方法可以加速这个矩阵乘积:A' * B * A(B半正定)?
- sql - 在 SQL Server 中查找重复的县名
- java - JAVA R 集成,R 包问题
- c# - 如何显示.net core api返回的值?
- linux - 错误后如何阻止git显示密码
- regex - 何使用正则表达式来做到这一点?
- bash - 按名称中的公共子字符串对文件进行分组
- artifactory - Artifactory 7.12.6:setMeUp 中的“下载片段”按钮返回 jsonMappingException