Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 任务成功后,进度指示器将继续运行。。。我怎样才能阻止它?_Java_Javafx - Fatal编程技术网

Java 任务成功后,进度指示器将继续运行。。。我怎样才能阻止它?

Java 任务成功后,进度指示器将继续运行。。。我怎样才能阻止它?,java,javafx,Java,Javafx,单击按钮时,我启动一个任务以验证用户,然后如果用户已验证,则它将运行另一个任务以获取用户当前打开的班次 我为这项任务绑定了一个进度指示器。。。但问题是,在任务成功后,指示器不会停止 更新1 我试图做的是仅当用户经过身份验证时才运行getUserShift任务(authenticate返回的用户不为null) 那么这里的问题是什么: @FXML private void signInAction(ActionEvent event) { String username = userName

单击按钮时,我启动一个任务以验证用户,然后如果用户已验证,则它将运行另一个任务以获取用户当前打开的班次

我为这项任务绑定了一个进度指示器。。。但问题是,在任务成功后,指示器不会停止

更新1 我试图做的是仅当用户经过身份验证时才运行getUserShift任务(authenticate返回的用户不为null)

那么这里的问题是什么:

@FXML
private void signInAction(ActionEvent event) {
    String username = userNameText.getText();
    String password = passwordText.getText();

    Task<Void> runSignInTask = signInTask();
    runSignInTask.setOnSucceeded(e -> {
        System.out.println("SignIn Task Succeeded");
        progressIndicator.progressProperty().unbind();
    });
    runSignInTask.setOnFailed(e -> {
        System.out.println("SignIn Task Failed??!!");
    });
    progressIndicator.progressProperty().bind(runSignInTask.progressProperty());
    new Thread(runSignInTask).start();
}

public Task<Void> signInTask() {
    return new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            Task<User> runAuthTask = authenticate();
            runAuthTask.setOnSucceeded(e -> {
                System.out.println("Task Succeded!!");
                //Check if user Authenticated
                if (runAuthTask.getValue() != null) {
                    System.out.println("Access permitted");
                    //Run the second Task
                    Task<Shift> runGetUserShift = getUserShift(runAuthTask.getValue());
                    runGetUserShift.setOnSucceeded(l -> {
                        System.out.println("getUserShift task succeeded");
                        if (runGetUserShift.getValue() != null) {
                            Shift shift = runGetUserShift.getValue();
                            System.out.println("User has open shift");
                        }
                    });
                    runGetUserShift.setOnFailed(l -> {
                        System.out.println("getUserShift task Failed");
                    });
                    new Thread(runGetUserShift).start();
                } else {
                    System.out.println("Access Denied!!");
                }
            });
            runAuthTask.setOnFailed(e -> {
                System.out.println("Task Failed!!");
            });
            new Thread(runAuthTask).start();
            return null;
        }
    };
}

public Task<User> authenticate() {
    return new Task<User>() {
        @Override
        protected User call() throws Exception {
            return Authenticator.authenticated(userNameText.getText(), passwordText.getText());
        }
    };
}

public Task<Shift> getUserShift(User user) {
    return new Task<Shift>() {
        @Override
        protected Shift call() throws Exception {
            return ShiftDAO.getShift(user.getUserId(), user.getBranchId(), user.getComId());
        }
    };
}
@FXML
私人无效签名(ActionEvent事件){
字符串username=userNameText.getText();
字符串密码=passwordText.getText();
任务runSignInTask=signInTask();
runSignInTask.setonsucceed(e->{
System.out.println(“登录任务成功”);
progressIndicator.progressProperty().unbind();
});
runSignInTask.setOnFailed(e->{
System.out.println(“登录任务失败???”;
});
progressIndicator.progressProperty().bind(runSignInTask.progressProperty());
新线程(runSignInTask).start();
}
公共任务符号任务(){
返回新任务(){
@凌驾
受保护的Void调用()引发异常{
任务runAuthTask=authenticate();
runAuthTask.setOnSucceeded(e->{
System.out.println(“任务成功!!”;
//检查用户是否已通过身份验证
if(runAuthTask.getValue()!=null){
System.out.println(“允许访问”);
//运行第二个任务
Task runGetUserShift=getUserShift(runAuthTask.getValue());
runGetUserShift.setOnSucceeded(l->{
System.out.println(“getUserShift任务成功”);
if(runGetUserShift.getValue()!=null){
Shift=runGetUserShift.getValue();
System.out.println(“用户有打开的班次”);
}
});
runGetUserShift.setOnFailed(l->{
System.out.println(“getUserShift任务失败”);
});
新线程(runGetUserShift.start();
}否则{
System.out.println(“拒绝访问!!”;
}
});
runAuthTask.setOnFailed(e->{
System.out.println(“任务失败!!”;
});
新线程(runAuthTask).start();
返回null;
}
};
}
公共任务身份验证(){
返回新任务(){
@凌驾
受保护的用户调用()引发异常{
返回Authenticator.authenticated(userNameText.getText(),passwordText.getText());
}
};
}
公共任务getUserShift(用户){
返回新任务(){
@凌驾
受保护的移位调用()引发异常{
返回ShiftDAO.getShift(user.getUserId(),user.getBranchId(),user.getComId());
}
};
}

登录过程完成后progressIndicator没有停止,这是一个应用程序设计错误

我建议您使用单个任务完成所有工作,以便用户登录。 您的登录任务可能如下所示:

public Task<Void> signInTask() {
    return new Task<Void>() {

        @Override
        protected Void call() throws Exception {

            User user = Authenticator.authenticated(userNameText.getText(), passwordText.getText());
            if(user != null){
                 Shift shift = ShiftDAO.getShift(user.getUserId(), user.getBranchId(), user.getComId());
                 if(shift != null){
                     // logic if user has a shift
                 } else {
                     // logic if user has no shift, throw exception, etc.
                 }
            } else {
                 // logic if user is not authenticated, throw exception, etc.
            }
            return null;
        }
    }
}
公共任务符号任务(){
返回新任务(){
@凌驾
受保护的Void调用()引发异常{
User User=Authenticator.authenticated(userNameText.getText(),passwordText.getText());
如果(用户!=null){
Shift-Shift=ShiftDAO.getShift(user.getUserId(),user.getBranchId(),user.getComId());
如果(移位!=null){
//如果用户有班次,则为逻辑
}否则{
//用户无移位、抛出异常等情况下的逻辑。
}
}否则{
//如果用户未通过身份验证,则抛出异常等。
}
返回null;
}
}
}

有关更多信息,请参阅和。

为什么在另一个JavaFX任务中运行带有JavaFX任务的线程?无论如何,您的
登录任务将立即进入
成功
状态;它所做的就是在后台启动一个新线程。@fireandfuel我想如果我这样做,它们将在相同的环境中运行task@James_D好的,我更新了这个问题,希望它能澄清我想要实现的目标。。。那么,实现这一点的正确方法是什么?@Gado如果您希望在
runSignInTask
成功后立即停止“不确定进度”动画,只需将
progressIndicator.setProgress(1)
放在
progressIndicator.progressProperty().unbind()之后即可。但我的观点是,
runSignInTask
根本不做任何需要花费任何明显时间的事情,因此它会立即进入那种状态。现在还不清楚为什么要将这个逻辑分割成独立的任务
call()
方法的末尾,以便它执行OP希望它执行的操作。您需要
返回null。@James\u D是的,我完全忘记了
返回null<代码>更新进程(100100)是可选的。如果您不设置任务中的进度,它将保持在“不确定”,因此动画将在任务完成后继续(或者您可以取消绑定并设置进度指示器的进度;但您需要其中一个)。@James\u D return null不修复它。。。解除绑定不起作用,但设置进度并将其隐藏在onSuccess中起作用。。。只有用火焰和燃料回答。。。我的代码会立即隐藏它。。。实际上,隐藏对于不确定的进度条来说很方便。。。现在对我来说一切都有意义了。。。谢谢你们。