簡體   English   中英

帶有Task的Java中的多線程僅在onClick Button上起作用一次

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

隨附的代碼段如下。 我是多線程新手。 嘗試做多線程哪種工作。 但是,第一次單擊按鈕后,第二次以后將不再“創建線程”並運行我的方法。

我也嘗試過實現Runnable接口,但是無法獲得我的Anchorpane參考來加載小吃欄,因此我改用task方法。 感謝您的幫助!

    @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

與FutureTask一樣,Task是單發類,不能重用。 請參閱服務以獲取可重復使用的工作人員。

因此,如果您想重復上述過程多次,使用Task並不是一個好的選擇。 檢查您想要實現類似目標的工作人員和服務的推薦替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM