【问题标题】:Multi threading in Java with Task only work once when onClick ButtonJava中的多线程与Task仅在onClick按钮时工作一次
【发布时间】:2018-06-20 16:41:07
【问题描述】:

附上下面的代码sn-p。我是多线程的新手。试图做多线程哪种工作。但是,在我第一次单击该按钮后,第二次以后将不再“创建线程”并运行我的方法。

我也尝试过实现 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;
        }
    };

【问题讨论】:

    标签: java multithreading java-threads


    【解决方案1】:

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

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

    与 FutureTask 一样,Task 是一次性类,不能重复使用。 请参阅可重用 Worker 的服务。

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

    【讨论】:

    • 我明白了。很好的答案。非常感谢! :)
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2018-10-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多