Java 中的多线程任务仅在 onClick 按钮时工作一次

Multi threading in Java with Task only work once when onClick Button

附件是下面的代码片段。我是多线程的新手。试图做多线程哪种工作。但是,在我第一次点击按钮后,第二次以后就不再是 "create the thread" 和 运行 我的方法了。

我也尝试过实现 Runnable 接口,但它无法获取我的 Anchorpane 引用来加载小吃栏,因此我改用任务方法。感谢您的帮助!

    @FXML
    private AnchorPane anchorPane;

    Thread thread;
    @FXML
    void onClickLoginButton(ActionEvent event) throws Exception {
            thread = new Thread(task);
            thread.start();
    }
    Task<Void> task = new Task<Void>() {
        @Override
        public Void call(){
            //System.out.println("Thread running"+thread.getId());
            try {
                credential = login.login();
            } catch (UnknownHostException u) {
                Platform.runLater(() -> {
                    System.out.println("No wifi");
                    JFXSnackbar snackbar = new JFXSnackbar(anchorPane);
                    snackbar.show("Please check your internet connection", 3000);
                    //u.printStackTrace();
                });
            } catch (Exception e) {
                //e.printStackTrace();
            }
            //System.out.println("Thread running"+thread.getId());
            return null;
        }
    };

它只运行一次的原因与 Task 的一般工作方式有关

根据此处 Task 的文档:https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html

As with FutureTask, a Task is a one-shot class and cannot be reused. See Service for a reusable Worker.

因此,如果您想多次重复上述过程,使用 Task 不是一个好的选择。检查您想要实现类似目标的工人和服务的推荐替代方案。