JavaFX应用程序在执行任务时冻结

时间:2016-12-21 15:51:37

标签: java javafx javafx-2 javafx-8

我正在创建一个带有按钮和进度条的javaFX应用程序。我可以在其中按下按钮,40个http请求获得气味,并且应使用updateProgress()方法通过该过程更新进度条。现在问题是应用程序冻结一旦我按下开始按钮,并且正在发送请求,并且在流程完成时解冻

我的两个问题是:

1-我做错了什么,我怎样才能避免冻结?或者什么是让用户在背景中执行任务时能够与UI交互的最简单方法?

2-我的方式是通过流程更新progressBar,还是 有更好的标准方式吗?

编辑:这个问题的问题可能是我没有找到问题的主要部分,看起来相当复杂。我得到了它说我不能在EDT上执行后台任务的部分,但我该怎么办呢?

  

控制器类

public class myApp implements Initializable {
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        for (int i = 0; i < 40; i++) {
            signed_requests.add("fjiwejf939qf");
        }
    }

    @FXML
    Button btnLuckySpin;
    @FXML
    ProgressBar progressBar;

    ArrayList<String> signed_requests = new ArrayList<>(100);

    public void handleMouseClicks(MouseEvent event) {
        Node source = (Node) event.getSource();
        if (source == btnLuckySpin) {
            runLuckySpin();
        }
    }

    private void runLuckySpin() {
        int counter = 1;

        progress_steps = 4 * signed_requests.size();

        for (String signed_request : signed_requests) {
            setProgress();
            LuckySpin luckySpin = new LuckySpin(signed_request);
            setProgress();
            luckySpin.run();
            setProgress();
            counter++;
            setProgress();
        }
        progress_steps = 0;
    }

    private int progress_steps = 0;

    private void setProgress() {
        double progress = 0;
        progress += 100 / progress_steps;
        progressBar.setProgress(progress);
    }
}

0 个答案:

没有答案