如何在连续任务之间传递参数或引用(JavaFX)?

如何在连续任务之间传递参数或引用(JavaFX)?,java,spring-boot,javafx,task,java.util.concurrent,Java,Spring Boot,Javafx,Task,Java.util.concurrent,我有从JavaFx主线程触发的连续任务,每个任务调用一个服务。我从一个任务中检索到的值应该决定下一个任务的行为。我已经通过方法(下面的简化示例)实现了它,但它有点像意大利面条代码 import javafx.event.ActionEvent; import javafx.concurrent.Task; import java.util.concurrent.Executor; import java.util.concurrent.Executors; public class SomeC

我有从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);
        }

    }

}

导入javafx.event.ActionEvent;
导入javafx.concurrent.Task;
导入java.util.concurrent.Executor;
导入java.util.concurrent.Executors;
公共类SomeControllerClass{
私人遗嘱执行人;
@自动连线
私人用户服务;
@自动连线
私人会话服务会话服务;
公共无效初始化(){
exec=Executors.newSingleThreadExecutor(可运行->{
螺纹t=新螺纹(可运行);
t、 setDaemon(true);
返回t;
});
}
@FXML
私有无效按钮操作(ActionEvent事件){
最终字符串user=userTextField.getText().trim();
最终字符串传递=passTextField.getText().trim();
任务task1=新任务(){
@凌驾
受保护的UserBean调用()引发异常{
返回userService.getUserLogin(user,pass);
}
};
task1.setOnSucceeded(e->secondTask(task1.getValue());
task1.setOnFailed(e->methodToNotifySomeException());
执行(任务1);
}
私有void第二个任务(UserBean){
//仅当登录失败时,bean才会为null
如果(bean==null)someLabel.setText(“错误的用户或密码”);
否则{
任务task2=新任务(){
@凌驾
受保护的Void调用()引发异常{
setActiveUser(bean);
返回null;
}
};
task2.setOnSucceed(e->methodToChangeScene());
task2.setOnFailed(e->manageSomeException());
执行(任务2);
}
}
}
我也尝试了,但大致相同,我无法实例化我的连续任务找到某种方法到第二个任务,从第一个任务中检索值,而无需在方法中分离每个任务


我缺少的执行器实现是否允许在任务之间传递参数?有什么我完全不知道的“最佳实践”可以避免所有这些问题吗?

您是否探讨了这些问题?你知道或不知道?也许其中一个就是你要找的?我没发现任何意大利面。事实上,只有一个地方有两个可能的执行分支。如果您只是尝试登录,为什么还要使用
任务
?也许userservice的
任务
是好的,但是第二个任务不是。在第一个
任务中
,返回一个
布尔值
用户bean
。不要使用第二个
任务
。只需根据返回的`Boolean>在
onSucceeded
中执行下一个操作。