我正在创建一个带有按钮和进度条的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);
}
}